Selaa lähdekoodia

032E新增,OTA更新打开APP慢优化

zhangshenjie 1 kuukausi sitten
vanhempi
commit
ba99809c61

+ 8 - 0
BusinessAirFryer/src/main/assets/config_063.json

@@ -81,6 +81,14 @@
       "devMode": "SOUP",
       "listShow": true
     },
+    {
+      "type": "AUTO_CLEAN",
+      "name": "auto_clean",
+      "bg": "cm_icon_auto_clean",
+      "icon": "cm_icon_auto_clean",
+      "devMode": "SOUP",
+      "listShow": true
+    },
     {
       "type": "AF_DIY",
       "name": "af_diy",

+ 120 - 10
BusinessCommon/src/main/java/com/develop/common/utils/AppVersionUtil.kt

@@ -4,19 +4,20 @@ import android.annotation.SuppressLint
 import android.app.Application
 import android.content.Context
 import android.net.Uri
-import android.os.Handler
 import android.os.PowerManager
 import android.provider.Settings
-import androidx.core.content.ContextCompat.getSystemService
+import android.util.Log
 import com.azhon.appupdate.listener.OnDownloadListener
 import com.azhon.appupdate.util.LogUtil
 import com.blankj.utilcode.util.FileUtils
 import com.blankj.utilcode.util.ToastUtils
 import com.blankj.utilcode.util.ZipUtils
-import com.develop.base.ext.fromJson
+import com.develop.base.ext.getOtaFileMd5
+import com.develop.base.ext.getSN
+import com.develop.base.ext.getUpdateRecipeTime
 import com.develop.base.ext.globalApp
+import com.develop.base.ext.setOtaFileMd5
 import com.develop.base.ext.setRecipesList
-import com.develop.base.ext.toJson
 import com.develop.base.util.AppActivityManager
 import com.develop.base.util.FileKit
 import com.develop.base.util.GlobalToast
@@ -34,26 +35,34 @@ import com.develop.common.data_repo.net.model.response.RecipeDataConfig
 import com.develop.common.dialog.CancelConfirmDialog
 import com.develop.common.dialog.CommonDialog
 import com.develop.common.dialog.RecipeUpdateDialog
-import com.develop.common.event.TuyaEventBus
-import com.develop.common.tag.ISTUYA
+import com.develop.common.tag.CURRENT_USER_ID
 import com.develop.common.tag.SCREENSAVER
 import com.drake.net.Get
 import com.drake.net.Post
 import com.drake.net.component.Progress
 import com.drake.net.interfaces.ProgressListener
 import com.drake.net.utils.scopeNetLife
-import com.google.gson.Gson
 import kotlinx.serialization.decodeFromString
 import org.greenrobot.eventbus.EventBus
 import java.io.File
 import java.util.*
-import kotlin.collections.ArrayList
-import kotlin.collections.HashMap
-import kotlin.collections.List
 
 object AppVersionUtil {
     var numberList = mutableListOf<String>()
     var dialogRecipeUpdate = RecipeUpdateDialog()
+    var  sTime: Long = 0
+
+    fun  startRecord(){
+        sTime = System.currentTimeMillis()
+        Log.e("TAG 启动时间"," ------ startRecord :$sTime")
+    }
+
+    fun  endRecord(msg :String){
+        val cost = System.currentTimeMillis() - sTime
+        Log.e("TAG 启动时间","msg : $msg    ------ cost :$cost")
+    }
+
+
     fun checkRecipeUpdate(shoNoUpdateDialog: Boolean = false) {
         TopResumedAtyHolder.getCurrentActivity()?.apply {
             scopeNetLife {
@@ -298,6 +307,107 @@ object AppVersionUtil {
 
     }
 
+    fun  getRecipe(context: Context){
+        Thread {
+            var isUpdateFile = StringUtils.doesUpdateTxtFileExist()
+            //之前根据zip包的md5 更新,现在做一个文本获取进行更新, 先判断是否存在,存在再处理,不存在就走之前的方法
+            Log.d("TAG update", "isUpdateFile  文件: $isUpdateFile")
+            if (isUpdateFile) {
+                Log.d("TAG update", "isUpdateFile  文件存在 ")
+                var fileUpdate = StringUtils.getUpdateTime()
+                var roomUpdate = getUpdateRecipeTime()
+
+                Log.d("TAG update", "fileUpdate :   $fileUpdate")
+                Log.d("TAG update", "roomUpdate :   $roomUpdate")
+
+
+                FoodDataProvider.setUpdateTime(fileUpdate)
+                //当本地时间为空,或者file的文件时间比本地时间大的时候,证明食谱包更新了
+                if (roomUpdate == "" || fileUpdate.toLong() > roomUpdate.toLong()) {
+                    Log.d("TAG update", "isUpdateFile1111111--------  文件存在 ")
+
+                    //删除room数据库
+                    deleteRoomDb(context)
+                    //删除sd卡的东西
+                    FoodDataProvider.deleteAll()
+                    FoodDataProvider.prepareData(globalApp())
+                } else {
+                    FoodDataProvider.prepareData(globalApp())
+                }
+
+
+
+            } else {
+                val md5 = getOtaFileMd5()
+                val sn = getSN()
+                Log.d("TAG md5", "time :" + System.currentTimeMillis())
+                //大概50秒才获取到
+//            val zipMd2 = StringUtils.getFileMD5("system/media/cofa_cooking.zip")
+                Log.d("TAG md5", "md5 :$md5")
+                var zipMd5 = ""
+                if (md5.isNotEmpty()) {
+                    zipMd5 = FileUtils.getFileMD5ToString("system/media/cofa_cooking.zip")
+                }
+                Log.d("TAG md5", "time2222 :" + System.currentTimeMillis())
+                Log.d("TAG md5", "string :$zipMd5")
+                //处理ota食谱更新问题
+                if (sn.startsWith("010") && (md5.isEmpty() || md5 != zipMd5)) {
+                    /**
+                     *  如果MD5的值不存在,重新解压
+                     *  如果MD5的值不一样的,就代表食谱包已经重新更新
+                     *  需要先删除sd卡目录下的cofa文件,再重新解压
+                     * */
+                    deleteRoomDb(context)
+
+                    //删除sd卡的东西
+                    FoodDataProvider.deleteAll()
+
+
+                    FoodDataProvider.prepareData(globalApp())
+                } else {
+                    FoodDataProvider.prepareData(globalApp())
+                }
+                //010 每一次都把md5的值set进去
+                if (sn.startsWith("010")) {
+                    //优化启动程序
+                    if (zipMd5.isEmpty()) {
+                        zipMd5 = FileUtils.getFileMD5ToString("system/media/cofa_cooking.zip")
+                    }
+                    setOtaFileMd5(zipMd5)
+                }
+            }
+        }.start()
+    }
+
+    fun deleteRoomDb(context: Context) {
+
+        FoodDataProvider.getUserDatabase().userInfoDao().apply {
+            removeAllOnlineRecipe(CURRENT_USER_ID)
+            removeAllFavouriteRecipe(CURRENT_USER_ID)
+            removeAllHistoryRecipe(CURRENT_USER_ID)
+            removeAllOnUserTag(CURRENT_USER_ID)
+        }
+
+        FoodDataProvider.getUserDatabase().devConfigDao().apply {
+            removeAllDevVersion()
+        }
+
+        Log.d("TAG 删除room", "删除 FoodDataProvider Dao文件")
+
+        val applicationDirectory = context.cacheDir.parent?.let { File(it) }
+        if (applicationDirectory?.exists() == true) {
+
+            val files = applicationDirectory.listFiles() ?: emptyArray()
+            for (file in files) {
+                //databases目录放着room 的db文件,重新解压需要删除
+                if (file.name.equals("databases")) {
+                    Log.d("TAG 删除room", "删除 databases的room-db文件")
+                    FileUtils.delete(file)
+                }
+            }
+        }
+    }
+
     @SuppressLint("InvalidWakeLockTag")
     private fun downloadRecipes(
         newRecipes: LinkedList<String>,

+ 5 - 0
BusinessMain/src/main/java/com/develop/main/ui/ModeEntrance2Activity.kt

@@ -5,6 +5,7 @@ import android.view.LayoutInflater
 import androidx.lifecycle.MutableLiveData
 import com.alibaba.android.arouter.facade.annotation.Route
 import com.develop.base.ext.getModelNum
+import com.develop.base.ext.globalApp
 import com.develop.base.ext.navigateTo
 import com.develop.base.ext.src
 import com.develop.base.util.MMkvUtils
@@ -244,6 +245,10 @@ class ModeEntrance2Activity : CommonBindingActivity<ActivityModeEntrance2Binding
             .userInfoDao()
             .queryUserInfoByUserId(CURRENT_USER_ID)
         updateUserInfoUi(userInfo)
+
+//        //食谱解压
+//        AppVersionUtil.getRecipe(globalApp())
+
     }
 
 

+ 5 - 0
BusinessMain/src/main/java/com/develop/main/ui/ModeEntranceActivity.kt

@@ -20,6 +20,7 @@ import com.develop.base.ext.dimenRes
 import com.develop.base.ext.getGoneLogin
 import com.develop.base.ext.getModelNum
 import com.develop.base.ext.getSN
+import com.develop.base.ext.globalApp
 import com.develop.base.ext.isBrand011A
 import com.develop.base.ext.isBrand036I
 import com.develop.base.ext.isBrand054A
@@ -783,6 +784,10 @@ class ModeEntranceActivity : CommonBindingActivity<ActivityModeEntranceBinding>(
             .userInfoDao()
             .queryUserInfoByUserId(CURRENT_USER_ID)
         updateUserInfoUi(userInfo)
+
+//        //食谱解压
+//        AppVersionUtil.getRecipe(globalApp())
+
     }
 
 

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

@@ -99,7 +99,7 @@ class SettingMainActivity : CommonBindingActivity<ActivitySettingMainBinding>()
 //        }
 
         /**
-         * 需要隐藏登录 032D 011A 030A 010F 033
+         * 需要隐藏登录 032D 032E 011A 030A 010F 033
          * 需要隐藏涂鸦 010D 010F 032D 033 011A 036I 058A 058B
          * 需要隐藏亮度 010D
          *
@@ -109,7 +109,7 @@ class SettingMainActivity : CommonBindingActivity<ActivitySettingMainBinding>()
         dataList.clear()
         dataList = if (sn.startsWith("010D")) {
             DataFactory.genSetting010DModesList(resources)
-        } else if (sn.startsWith("032D") || sn.startsWith("010F") || sn.startsWith("033")) {
+        } else if (sn.startsWith("032D") ||sn.startsWith("032E") || sn.startsWith("010F") || sn.startsWith("033")) {
             DataFactory.genSetting032DModesList(resources)
         } else if (sn.startsWith("011")) {
             DataFactory.genSetting011AModesList(resources)
@@ -445,9 +445,9 @@ class SettingMainActivity : CommonBindingActivity<ActivitySettingMainBinding>()
 
         if (result.tuyaLicense != null) {
             result.tuyaLicense?.let {
-                TuyaUtils.mAk = it.ak
-                TuyaUtils.mPid = it.pid
-                TuyaUtils.mUid = it.uuid
+                TuyaUtils.mAk = it.ak.toString().trim()
+                TuyaUtils.mPid = it.pid.toString().trim()
+                TuyaUtils.mUid = it.uuid.toString().trim()
                 TuyaUtils.initSDK(this@SettingMainActivity, "1.0.0")
                 isTuya = true
                 isNetWordLoading = false
@@ -485,7 +485,7 @@ class SettingMainActivity : CommonBindingActivity<ActivitySettingMainBinding>()
     @SuppressLint("NotifyDataSetChanged")
     fun tuyaEvent() {
         /**
-         * 需要隐藏登录 033  010F 030A 011A
+         * 需要隐藏登录 032D 032E 011A 030A 010F 033
          * 需要隐藏涂鸦 010D 010F 032D 033 011A 036I 058A 058B
          * 需要隐藏亮度 010D
          *
@@ -495,7 +495,7 @@ class SettingMainActivity : CommonBindingActivity<ActivitySettingMainBinding>()
 
         dataList = if (sn.startsWith("010D")) {
             DataFactory.genSetting010DModesList(resources)
-        } else if (sn.startsWith("032D") || sn.startsWith("010F") || sn.startsWith("033")) {
+        } else if (sn.startsWith("032D")||sn.startsWith("032E") || sn.startsWith("010F") || sn.startsWith("033")) {
             DataFactory.genSetting032DModesList(resources)
         } else if (sn.startsWith("011")) {
             DataFactory.genSetting011AModesList(resources)

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 365 - 0
app/src/brand032ETuya/res/values-de/strings.xml


+ 437 - 0
app/src/brand032ETuya/res/values-en/strings.xml

@@ -0,0 +1,437 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+    <string name="not_a_member_yet">Not a %1s yet?</string>
+    <string name="member">member</string>
+    <string name="select_language">Select Language</string>
+    <string name="next">NEXT</string>
+    <string name="english">English</string>
+    <string name="chinese">简体中文</string>
+    <string name="france">Français</string>
+    <string name="japan">日本語</string>
+    <string name="skip"><![CDATA[SKIP >>]]></string>
+    <string name="recipes">RECIPES</string>
+    <string name="mode">MODE</string>
+    <string name="sunday">Sunday</string>
+    <string name="monday">Monday</string>
+    <string name="tuesday">Tuesday</string>
+    <string name="wednesday">Wednesday</string>
+    <string name="thursday">Thursday</string>
+    <string name="friday">Friday</string>
+    <string name="saturday">Saturday</string>
+    <string name="resume">RESUME</string>
+    <string name="privacy_policy">Privacy policy</string>
+    <string name="privacy_policy_content">1.How do we collect and use your personal information
+Nanfang plus client is an online information platform developed and operated by Guangdong Nanfang newspaper mobile media Co.,Ltd.(hereinafter referred to as"we").In theprocess of using the southern plus client service,we will collect the information you actively provide when using the service or arising from using the service in the following ways to provide you with services,optimize our services and ensure the security of your account.</string>
+    <string name="i_agree">I Agree</string>
+    <string name="i_have_read_the_privacy_policy">I have read the privacy policy</string>
+    <string name="second">Second</string>
+    <string name="wifi">WIFI</string>
+    <string name="off_line">OFF-LINE</string>
+    <string name="ok">OK</string>
+    <string name="on_line">ON-LINE</string>
+    <string name="pwd_can_not_be_empty">pwd can not be empty!</string>
+    <string name="skin_for_now">Skin for now</string>
+    <string name="login">Login</string>
+    <string name="online_recipes">Online Recipes</string>
+    <string name="cook_history">Cooking history</string>
+    <string name="favourite_recipes">Favourite recipes</string>
+    <string name="settings">Settings</string>
+    <string name="grid_view">Grid view</string>
+    <string name="list_view">List view</string>
+    <string name="adapted_cooking">ADAPTED COOKING</string>
+    <string name="scales">SCALES</string>
+    <string name="boil_water">BOIL WATER</string>
+    <string name="chop">CHOP</string>
+    <string name="ferment">FERMENT</string>
+    <string name="slow_cook">SLOW COOK</string>
+    <string name="knead_dough">KNEAD DOUGH</string>
+    <string name="steam">STEAM</string>
+    <string name="food_processor">FOOD PROCESSOR</string>
+    <string name="turbo">TURBO</string>
+    <string name="citrus_juicer">CITRUS_JUICER</string>
+    <string name="dicing">DICING</string>
+    <string name="potato_peeler">POTARO PEELER</string>
+
+    <string name="steam_010">STEAM</string>
+    <string name="knead_dough_010">KNEAD DOUGH</string>
+    <string name="slow_cook_010">SLOW COOK</string>
+    <string name="ferment_010">FERMENT</string>
+    <string name="mulsify_010">MULSIFY</string>
+    <string name="food_processor_010">FOOD PROCESSOR</string>
+    <string name="chop_010">CHOP</string>
+    <string name="wight_010">WEIGHT</string>
+    <string name="auto_clean_010">AUTO CLEAN</string>
+    <string name="turbo_010">TURBO</string>
+
+
+
+
+
+
+    <string name="language">LANGUAGE</string>
+    <string name="sound">SOUND</string>
+    <string name="brightness">BRIGHTNESS</string>
+    <string name="user_account">USER ACCOUNT</string>
+    <string name="storage">STORAGE</string>
+    <string name="reset">RESTORE FACTORY SETTINGS</string>
+    <string name="about">ABOUT</string>
+    <string name="tuya">App  Download</string>
+
+
+
+    <string name="tuya_app_title">With Tuya</string>
+    <string name="tuya_app_content">Please use app (with Tuya ) to scan the QR code</string>
+    <string name="tuya_sn_title">Cobotmix</string>
+    <string name="tuya_sn_content">Please use cobotmix app to scan the QR code</string>
+
+    <string name="current_cooking_dialog_title">Overwrite current cooking process?\nBy overwriting,your current progress will got lost.</string>
+
+
+    <string name="weight">WEIGHT</string>
+    <string name="local_recipes">Local recipes</string>
+    <string name="download">Download</string>
+    <string name="downloading">Downloading</string>
+    <string name="enter_search">Enter search</string>
+    <string name="search">Search</string>
+    <string name="all_name">Alphabetical (A-Z)</string>
+    <string name="most_popular">Most popular</string>
+    <string name="newest">Newest</string>
+    <string name="the_most_commonly_searched">The most commonly searched</string>
+    <string name="notice">Notice</string>
+    <string name="all">ALL</string>
+    <string name="Recipes">Recipes</string>
+    <string name="ingredients">Ingredients</string>
+    <string name="Brightness">Brightness</string>
+    <string name="screen_lock_time">Screen lock time</string>
+    <string name="time_3min">3Min</string>
+    <string name="time_5min">5Min</string>
+    <string name="time_10min">10Min</string>
+    <string name="time_20min">20Min</string>
+    <string name="time_30min">30Min</string>
+    <string name="Sound">Sound</string>
+    <string name="text_to_speech">Text to speech</string>
+    <string name="Language">Language</string>
+    <string name="Continue">CONTINUE</string>
+    <string name="start_cooking">START COOKING</string>
+    <string name="off">OFF</string>
+    <string name="on">ON</string>
+    <string name="update_the_recipes">Update the recipes</string>
+    <string name="apk">APK</string>
+    <string name="mcu">MCU</string>
+    <string name="tp">FW</string>
+    <string name="serial_number">SN</string>
+    <string name="standby_time">MODEL</string>
+    <string name="update">Update</string>
+    <string name="About">About</string>
+    <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="connected_successfully">connected successfully</string>
+    <string name="network_wifi_status_connected_no_internet">Connected, but unable to access the Internet</string>
+    <string name="network_wifi_status_saved">Saved</string>
+    <string name="network_wifi_status_idle" />
+    <string name="network_wifi_status_disabled">"Stopped"</string>
+    <string name="network_wifi_status_network_failure">"IP address configuration failure"</string>
+    <string name="network_wifi_status_wifi_failure">"WLAN connection failure"</string>
+    <string name="network_wifi_status_password_failure">"There is a problem with authentication"</string>
+    <string name="network_wifi_status_scanning">Scanning...</string>
+    <string name="network_wifi_status_connecting">Connecting…</string>
+    <string name="network_wifi_status_authenticating">Authentication in progress…</string>
+    <string name="network_wifi_status_obtaining_ip_address">obtaining IP address…</string>
+    <string name="network_wifi_status_connected">Connected</string>
+    <string name="network_wifi_status_suspended">Suspended</string>
+    <string name="network_wifi_status_disconnecting">Disconnecting…</string>
+    <string name="network_wifi_status_disconnected">Disconnected</string>
+    <string name="network_wifi_status_failed">Failed</string>
+    <string name="network_wifi_status_blocked">Blocked</string>
+    <string name="network_wifi_status_verifying_poor_link">Temporarily shut down (bad network condition)</string>
+    <string name="wifi_loading_text">Connecting…</string>
+    <string name="start">START</string>
+    <string name="pause">PAUSE</string>
+    <string name="cancel">CANCEL</string>
+    <string name="confirm">CONFIRM</string>
+    <string name="stop">STOP</string>
+    <string name="turn_right">TURN\nRIGHT</string>
+    <string name="turn_left">TURN\nLEFT</string>
+    <string name="temperature">TEMPERATURE</string>
+    <string name="time">TIME</string>
+    <string name="speed">SPEED</string>
+    <string name="direction">DIRECTION</string>
+    <string name="bad">Bad</string>
+    <string name="imperfect">Imperfect</string>
+    <string name="ordinary">Ordinary</string>
+    <string name="good">Good</string>
+    <string name="perfect">Perfect</string>
+    <string name="are_you_sure_to_delete">Are you sure to delete?</string>
+    <string name="no">NO</string>
+    <string name="easy">easy</string>
+    <string name="medium">medium</string>
+    <string name="hard">hard</string>
+    <string name="grade">GRADE</string>
+
+    <string name="srl_footer_finish">Load Success</string>
+    <string name="srl_footer_loading">Loading…</string>
+
+    <string name="unset_param_tips">Please set the operation parameters</string>
+    <string name="pmpt_confirm">Confirm</string>
+    <string name="pmpt_cancel">Cancel</string>
+    <string name="pmpt_msg">Tips</string>
+    <string name="dev_end_of_run_tips">Finish!</string>
+    <string name="dev_not_orange_parts">Please install the Twisted Orange accessory to start the Twisted Orange program。</string>
+    <string name="dev_remove_orange_parts">The machine is in twisted orange mode, please remove the current accessory.</string>
+    <string name="dev_dice_and_peel_tips">In order to use the program, it is necessary to have and install the appropriate attachment.</string>
+
+    <string name="hight_temp_warning_tips">The current temperature exceeds 60, and the motor speed exceeds the third gear. Are you sure to continue?</string>
+    <string name="hight_temp_turbo_tips">The current temperature exceeds 60, turbo function cannot be operated</string>
+    <string name="update_msg">System updating, please wait~</string>
+    <string name="update_title">Do you want to upgrade to the new version?</string>
+    <string name="finish_download">Downloaded</string>
+    <string name="download_fail">Download failure</string>
+    <string name="start_download">Start to download</string>
+    <string name="weight_overload_tips">Weighing overload</string>
+    <string name="forgot_password">Forgotten password</string>
+    <string name="enter_email_id">Enter Email ID</string>
+    <string name="enter_password">Enter Password</string>
+    <string name="register">Register</string>
+    <string name="launch_detail">Join us today and enjoy the ultimate cooking expenence</string>
+    <string name="login_sign_up">Login / Sign up</string>
+    <string name="skip_for_now">Skip for now</string>
+    <string name="reset_password">Reset Password</string>
+    <string name="enter_captcha">Enter Captcha</string>
+    <string name="send_email">Send 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>
+    <string name="enter_nickname">Enter Nickname</string>
+    <string name="Gender">Gender</string>
+    <string name="male">Male</string>
+    <string name="age">Age</string>
+    <string name="save">Save</string>
+    <string name="cancellation_of_account">Cancellation of account</string>
+    <string name="sign_up_it_s_free">Sign up, it\'s FREE</string>
+    <string name="pwd_requirement">Composed of letters and numbers,with no less than 8 digits.</string>
+    <string name="please_select_age">Please select age</string>
+    <string name="cancel_lower">Cancel</string>
+    <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>
+    <string name="download_failed">Download failed</string>
+    <string name="warning">Warning!</string>
+    <string name="lid_unlock">Lid unlock</string>
+    <string name="share_with_more_people">Share with more people</string>
+    <string name="scan_qr_code_with_camera">Scan QR code with camera</string>
+    <string name="enter_what_you_want_to_say">Enter what you want to say</string>
+    <string name="note_title">NOTE TITLE</string>
+
+    <string name="type_your_notes_here">Type your notes here</string>
+    <string name="make_1_jar">MAKES 1 JAR</string>
+    <string name="make_n_jars">MAKES %1s JARS</string>
+    <string name="per_serving">Per serving</string>
+    <string name="preparation">Preparation:</string>
+    <string name="hours">h</string>
+    <string name="min">min</string>
+
+    <string name="food_hour">hour</string>
+    <string name="food_minutes">minutes</string>
+
+
+    <string name="ready_in">Ready in:</string>
+    <string name="jar">JAR</string>
+    <string name="serving_sizes">Serving sizes</string>
+    <string name="score">Score</string>
+    <string name="share">Share</string>
+    <string name="delete">Delete</string>
+    <string name="recipe_update_tips">A total of {{num}} recipes have been found. Do you want to download them?</string>
+    <string name="no_recipe_update_tips">No new recipe data package \n Currently the latest version</string>
+    <string name="recipe_update_process_tips">({{progress}})Recipe data downloading…</string>
+    <string name="recipe_update_finish">Recipe data update completed</string>
+    <string name="update_recipe_title">Recipe update</string>
+    <string name="restore_confirm_tips">Are you sure to restore to the factory settings?</string>
+    <string name="change_lang_tips">The program is running, please close the program to perform this operation again!</string>
+    <string name="recipe_not_language">The recipe language does not match, please switch languages</string>
+    <string name="exit_weight_align">Exit calibration</string>
+    <string name="weight_aligning">Calibrating..</string>
+    <string name="weight_one_kg_tips">Please put on weight 1 KGS</string>
+    <string name="weight_two_kg_tips">Please put on weight 2 KGS</string>
+    <string name="weight_align_success">Calibrate successfully!</string>
+    <string name="change_lang_tips2">After switch the language, recipe languages will change at the same time and restart. Are you sure to switch the language? </string>
+    <string name="pot_clover_not_clost_tips">The lid is unlocked. Please lock the lid first and start.</string>
+    <string name="screen_saver_title">Do you want to enter the breath screen?</string>
+    <string name="sex">Sex</string>
+    <string name="wight">WEIGHT</string>
+    <string name="running_block_tips">Please stop the running program and start new programs.</string>
+    <string name="unset_target_time">Time has not been set.</string>
+    <string name="empty_notice">Empty Notice</string>
+    <string name="network_error">network error</string>
+    <string name="help">Help</string>
+    <string name="evaluate_successfully">Evaluate successfully</string>
+    <string name="reset_to_default_settings">Reset to default settings</string>
+    <string name="home_auth"><![CDATA[HOME >>]]></string>
+    <string name="rating">rating</string>
+    <string name="loading">Loading</string>
+    <string name="Min20">20Min</string>
+    <string name="enjoy_your_meal">ENJOY YOUR MEAL</string>
+
+    <string name="gan_sao_yi_chan">Attention\n· High temperature\n· No contents in bowl when heating\n· Add ingredients, liquids</string>
+
+    <string name="zhuan_su_fan_kui_yi_chan">Warning\n· Bowl lid not fully engaged\n· Motor overload, allow machine to cool down, Restart with less bowl contents.</string>
+    <string name="dian_zi_cheng_tong_xin_yi_chan">Attention\n· Weight was not measured, scale error\n· Scale faulty </string>
+    <string name="ntc_yi_chan"> Attention: NTC is not working properly, please contact technical service.</string>
+    <string name="mei_fang_guo_yi_chan">Attention\n· Mixing bowl not engaged, reposition bowl</string>
+    <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="no_net_error">Please connect to Wifi</string>
+    <string name="no_login">Please enter the fields above to login</string>
+    <string name="enjoy_your_meal_desc">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="recipe_complete">RECIPE COMPLETED</string>
+    <string name="engjoy_your_meal">ENJOY YOUR MEAL!</string>
+
+    <string name="press_the_button">Press the button</string>
+    <string name="please_fill_in">Please fill in</string>
+    <string name="Password_is_not_the_same">Password is not the same</string>
+    <string name="enter">ENTER</string>
+    <string name="repeat">REPEAT</string>
+    <string name="automatic_recipes">Automatic\nRecipes</string>
+    <string name="automatic_programmes">Automatic\nProgrammes</string>
+    <string name="manual_cooking">Manual\nCooking</string>
+    <string name="download_new_recipes">Download\nnew recipes</string>
+    <string name="home">HOME</string>
+    <string name="back">BACK</string>
+    <string name="historical_search">Historical search</string>
+
+    <string name="Automatic_recipes">AUTOMATIC RECIPES</string>
+    <string name="Automatic_programmes">AUTOMATIC PROGRAMMES</string>
+    <string name="Manual_cooking">MANUAL COOKING</string>
+    <string name="Download_new_recipes">DOWNLOAD NEW RECIPES</string>
+    <string name="account_or_pwd_error">Incorrect account number or password</string>
+    <string name="login_faild">Incorrect account number or password</string>
+
+    <string name="Automatic_recipes_32">AUTOMATIC RECIPES</string>
+    <string name="Automatic_programmes_32">AUTOMATIC PROGRAMS</string>
+    <string name="Manual_cooking_32">MANUAL\nMODE</string>
+    <string name="Download_new_recipes_32">DOWNLOAD RECIPES</string>
+
+
+
+    <!-- 空炸模式 -->
+    <string name="air_fryer">AIR FRYER</string>
+    <string name="meat">MEAT</string>
+    <string name="fish">FISH</string>
+    <string name="bakc">BAKC</string>
+    <string name="drumsticks">DRUMSTICKS</string>
+    <string name="chicken_wing">CHICKEN WING</string>
+    <string name="vegetable">VEGETABLE</string>
+    <string name="shrimp">SHRIMP</string>
+    <string name="pizza">PIZZA</string>
+    <string name="dehydrate">DEHYDRATE</string>
+    <string name="confirm_change_dev_mode">Confirm change dev mode ?</string>
+    <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>
+    <string name="puree">PUREE</string>
+    <string name="roast">ROAST</string>
+    <string name="smoothie">SMOOTHIE</string>
+    <string name="sovs_vide">SOVS VIDE</string>
+    <string name="auto_clean">AUTO CLEAN</string>
+    <string name="apk_version_latest">Current version is the latest version.</string>
+    <string name="installing">Installing...</string>
+    <string name="save_success">Save success</string>
+    <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>
+    <string name="please_fill_in_the_password">Please fill in the password</string>
+    <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>
+
+    <!-- 029兼容翻译 -->
+    <string name="Automatic_recipes_29">Interactive recipes</string>
+    <string name="Manual_cooking_29">Manual cooking</string>
+    <string name="Automatic_programmes_29">Automatic programs</string>
+    <string name="Download_new_recipes_29">Download new recipes</string>
+
+
+    <!-- 011兼容翻译 -->
+    <string name="language_011">LANGUAGE</string>
+    <string name="brightness_011">Screen lock time</string>
+    <string name="reset_011">Resume to default setting</string>
+    <string name="mei_fang_guo_yi_chan_011">Note\n· No mixing bowl detected</string>
+    <string name="lid_unlock_011">Mixing bowl lid not locked properly</string>
+    <string name="notice_011">Notification</string>
+    <string name="empty_notice_011">No notifications</string>
+    <string name="press_the_button_011">Press and hold the button</string>
+    <string name="direction_011">Rotation</string>
+
+
+    <string name="automatic_recipes_011">Recipes</string>
+    <string name="automatic_programmes_011">Automatic\nprograms</string>
+    <string name="manual_cooking_011">Manual\ncooking</string>
+    <string name="download_new_recipes_011">Download</string>
+
+    <string name="adapted_cooking_011">Manual cooking</string>
+    <string name="knead_011">Knead</string>
+    <string name="steam_011">Steam</string>
+    <string name="boil_water_011">Boil</string>
+    <string name="sovs_vide_011">Sous-vide</string>
+    <string name="cook_rice_011">Rice cooking</string>
+    <string name="food_processor_011">Food processor</string>
+    <string name="chop_011">Chop</string>
+    <string name="turbo_011">Turbo</string>
+    <string name="smoothie_011">Smoothie</string>
+    <string name="auto_clean_011">Autowash</string>
+    <string name="wight_011">Scales</string>
+    <string name="dicing_011">Dicing</string>
+    <string name="citrus_juicer_011">Citrus juicer</string>
+    <string name="potato_peeler_011">Potato peeler</string>
+
+
+
+
+    <string name="hours_011">h</string>
+    <string name="min_011">min</string>
+    <string name="sec_011">sec</string>
+
+    <string name="note_title_011">My notes</string>
+    <string name="tare_011">Tare</string>
+    <string name="newest_011">The latest</string>
+    <string name="most_popular_011">Favourites</string>
+
+    <string name="turn_right_011">Right</string>
+    <string name="turn_left_011">Left</string>
+    <string name="preparation_011">Preparation:</string>
+    <string name="ready_in_011">Cooking time:</string>
+
+</resources>

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 335 - 0
app/src/brand032ETuya/res/values-es/strings.xml


+ 344 - 0
app/src/brand032ETuya/res/values-it/strings.xml

@@ -0,0 +1,344 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+    <string name="not_a_member_yet">Non sei ancora membro?</string>
+    <string name="member">membro</string>
+    <string name="select_language">Seleziona lingua</string>
+    <string name="next">PROSSIMO</string>
+    <string name="english">Inglese</string>
+    <string name="chinese">Cinese</string>
+    <string name="france">Francia</string>
+    <string name="japan">Giapponese</string>
+    <string name="skip">Salta</string>
+    <string name="recipes">RICETTE</string>
+    <string name="mode">MODO</string>
+    <string name="sunday">Domenica</string>
+    <string name="monday">Lunedì</string>
+    <string name="tuesday">Martedì</string>
+    <string name="wednesday">Mercoledì</string>
+    <string name="thursday">Giovedì</string>
+    <string name="friday">Venerdì</string>
+    <string name="saturday">Sabato</string>
+    <string name="resume">RIPRENDI</string>
+    <string name="privacy_policy">Informativa sulla privacy</string>
+    <string name="privacy_policy_content">1.Come raccogliamo e utilizziamo le tue informazioni personali
+Nanfang plus client è una piattaforma di informazioni online sviluppata e gestita da Guangdong Nanfang giornale mobile media Co., Ltd. (di seguito denominato "noi"). ottimizzare i nostri servizi e garantire la sicurezza del tuo account.</string>
+    <string name="i_agree">Sono d\'accordo</string>
+    <string name="i_have_read_the_privacy_policy">Ho letto l\'informativa sulla privacy</string>
+    <string name="second">Secondo</string>
+    <string name="wifi">WIFI</string>
+    <string name="off_line">OFF-LINE</string>
+    <string name="ok">OK</string>
+    <string name="on_line">ON-LINE</string>
+    <string name="pwd_can_not_be_empty">pwd non può essere vuoto!</string>
+    <string name="skin_for_now">Pelle per ora</string>
+    <string name="login">Accedi</string>
+    <string name="online_recipes">Ricette online</string>
+    <string name="cook_history">Storia della cucina</string>
+    <string name="favourite_recipes">Ricette preferite</string>
+    <string name="settings">Impostazioni</string>
+    <string name="grid_view">Vista griglia</string>
+    <string name="list_view">Vista elenco</string>
+    <string name="adapted_cooking">CUCINA ADATTATA</string>
+    <string name="scales">BILANCE</string>
+    <string name="boil_water">ACQUA DI BOIL</string>
+    <string name="chop">TAGLIA</string>
+    <string name="ferment">FERMENTO</string>
+    <string name="slow_cook">CUOCO LENTO</string>
+    <string name="knead_dough">IMPASTATURA</string>
+    <string name="steam">VAPORE</string>
+    <string name="food_processor">PROCESSORE ALIMENTARE</string>
+    <string name="turbo">TURBO</string>
+    <string name="steam_010">VAPORE</string>
+    <string name="knead_dough_010">IMPASTATURA</string>
+    <string name="slow_cook_010">Cuoco lento</string>
+    <string name="ferment_010">FERMENTO</string>
+    <string name="mulsify_010">MULSIFICA</string>
+    <string name="food_processor_010">PROCESSORE ALIMENTARE</string>
+    <string name="chop_010">TAGLIA</string>
+    <string name="wight_010">PESO</string>
+    <string name="auto_clean_010">PULIZIA AUTOMATICA</string>
+    <string name="turbo_010">TURBO</string>
+    <string name="language">LINGUA</string>
+    <string name="sound">SUONO</string>
+    <string name="brightness">LUCE</string>
+    <string name="user_account">CONTO UTENTE</string>
+    <string name="storage">CONSERVAZIONE</string>
+    <string name="reset">IMPOSTAZIONI DELLA FABBRICA DI RESTAURO</string>
+    <string name="about">A PROPOSITO</string>
+    <string name="tuya">APP Scarica</string>
+    <string name="weight">PESO</string>
+    <string name="local_recipes">Ricette locali</string>
+    <string name="download">Scarica</string>
+    <string name="downloading">Scaricamento</string>
+    <string name="enter_search">Inserisci ricerca</string>
+    <string name="search">Cerca</string>
+    <string name="most_popular">Più popolari</string>
+    <string name="newest">Più recente</string>
+    <string name="the_most_commonly_searched">Il più comunemente ricercato</string>
+    <string name="notice">Avviso</string>
+    <string name="all">TUTTI</string>
+    <string name="Recipes">Ricette</string>
+    <string name="ingredients">Ingredienti</string>
+    <string name="Brightness">Luminosità</string>
+    <string name="screen_lock_time">Tempo di blocco dello schermo</string>
+    <string name="time_3min">3 minuti</string>
+    <string name="time_5min">5 minuti</string>
+    <string name="time_10min">10 minuti</string>
+    <string name="time_20min">20 minuti</string>
+    <string name="time_30min">30 minuti</string>
+    <string name="Sound">Suono</string>
+    <string name="text_to_speech">Testo a discorso</string>
+    <string name="Language">Lingua</string>
+    <string name="Continue">CONTINUA</string>
+    <string name="start_cooking">INIZIARE LA CUCINA</string>
+    <string name="off">SPENTO</string>
+    <string name="on">ACCESO</string>
+    <string name="update_the_recipes">Aggiorna le ricette</string>
+    <string name="apk">APK</string>
+    <string name="mcu">MCU</string>
+    <string name="tp">FW</string>
+    <string name="serial_number">SN</string>
+    <string name="standby_time">MODELLO</string>
+    <string name="update">Aggiorna</string>
+    <string name="About">Circa</string>
+    <string name="are_you_sure_to_restore_factory_settings">Sei sicuro di ripristinare le impostazioni di fabbrica?</string>
+    <string name="yes">SÌ</string>
+    <string name="easy">easy</string>
+    <string name="medium">medium</string>
+    <string name="hard">hard</string>
+
+    <string name="restore_factory_settings">Ripristina impostazioni di fabbrica</string>
+    <string name="network_wifi_status_connected_no_internet">Collegato, ma non in grado di accedere a Internet</string>
+    <string name="network_wifi_status_saved">Salvato</string>
+    <string name="network_wifi_status_idle" />
+    <string name="network_wifi_status_disabled">"Arrestato"</string>
+    <string name="network_wifi_status_network_failure">"Errore di configurazione dell\'indirizzo IP"</string>
+    <string name="network_wifi_status_wifi_failure">"Guasto della connessione WLAN"</string>
+    <string name="network_wifi_status_password_failure">"Si verifica un problema con l\'autenticazione"</string>
+    <string name="network_wifi_status_scanning">Scansione...</string>
+    <string name="network_wifi_status_connecting">Collegamento...</string>
+    <string name="network_wifi_status_authenticating">Autenticazione in corso...</string>
+    <string name="network_wifi_status_obtaining_ip_address">Ottenere indirizzo IP...</string>
+    <string name="network_wifi_status_connected">Connesso</string>
+    <string name="network_wifi_status_suspended">Sospeso</string>
+    <string name="network_wifi_status_disconnecting">Disconnetto...</string>
+    <string name="network_wifi_status_disconnected">Disconnetti</string>
+    <string name="network_wifi_status_failed">Impossibile</string>
+    <string name="network_wifi_status_blocked">Bloccato</string>
+    <string name="network_wifi_status_verifying_poor_link">Arresto temporaneo (cattive condizioni della rete)</string>
+    <string name="start">AVVIA</string>
+    <string name="pause">PAUSA</string>
+    <string name="cancel">CANCELLA</string>
+    <string name="confirm">CONFERMA</string>
+    <string name="stop">FERMA</string>
+    <string name="turn_right">Gira a destra</string>
+    <string name="turn_left">Gira a sinistra</string>
+    <string name="temperature">TEMPERATURA</string>
+    <string name="time">TEMPO</string>
+    <string name="speed">VELOCITÀ</string>
+    <string name="direction">DIREZIONE</string>
+    <string name="bad">Cattivo</string>
+    <string name="imperfect">Imperfetto</string>
+    <string name="ordinary">Ordinario</string>
+    <string name="good">Bene</string>
+    <string name="perfect">Perfetto</string>
+    <string name="are_you_sure_to_delete">Sei sicuro di cancellare?</string>
+    <string name="no">NO</string>
+    <string name="unset_param_tips">Impostare i parametri operativi ( Temperatura, tempo e velocità ).</string>
+    <string name="pmpt_confirm">Conferma</string>
+    <string name="pmpt_cancel">Annulla</string>
+    <string name="pmpt_msg">Consigli</string>
+    <string name="dev_end_of_run_tips">Finisci!</string>
+    <string name="hight_temp_warning_tips">La temperatura corrente supera 60 e la velocità del motore supera la terza marcia. Sei sicuro di continuare?</string>
+    <string name="hight_temp_turbo_tips">La temperatura corrente supera 60, la funzione turbo non può essere azionata</string>
+    <string name="update_msg">Aggiornamento del sistema, attendere~</string>
+    <string name="update_title">E\' l\'ultima versione?</string>
+    <string name="finish_download">Scaricato</string>
+    <string name="download_fail">Scaricamento non riuscito</string>
+    <string name="start_download">Avvia il download</string>
+    <string name="weight_overload_tips">Sovraccarico di pesatura</string>
+    <string name="forgot_password">Password dimenticata</string>
+    <string name="enter_email_id">Inserisci ID email</string>
+    <string name="enter_password">Inserisci password</string>
+    <string name="register">Registrati</string>
+    <string name="launch_detail">Unisciti a noi oggi e goditi il massimo della spesa per cucinare</string>
+    <string name="login_sign_up">Accedi / Iscriviti</string>
+    <string name="skip_for_now">Salta per ora</string>
+    <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>
+    <string name="enter_nickname">Inserisci nickname</string>
+    <string name="Gender">Sesso</string>
+    <string name="male">Maschio</string>
+    <string name="age">Età</string>
+    <string name="save">Salva</string>
+    <string name="cancellation_of_account">Annullamento del conto</string>
+    <string name="sign_up_it_s_free">Iscriviti, è GRATIS</string>
+    <string name="pwd_requirement">Composto da lettere e numeri, con non meno di 8 cifre.</string>
+    <string name="please_select_age">Seleziona età</string>
+    <string name="cancel_lower">Annulla</string>
+    <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>
+    <string name="download_failed">Scaricare non riuscito</string>
+    <string name="warning">Attenzione!</string>
+    <string name="lid_unlock">Sblocco del coperchio</string>
+    <string name="share_with_more_people">Condividi con più persone</string>
+    <string name="scan_qr_code_with_camera">Scansiona il codice QR con la fotocamera</string>
+    <string name="enter_what_you_want_to_say">Inserisci quello che vuoi dire</string>
+    <string name="note_title">NOTA TITOLO</string>
+    <string name="type_your_notes_here">Digita qui le tue note</string>
+    <string name="make_1_jar">Produce un barattolo</string>
+    <string name="make_n_jars">Produce n caratteri</string>
+    <string name="per_serving">Per porzione</string>
+    <string name="preparation">Preparazione:</string>
+    <string name="hours">ore</string>
+    <string name="min">minuto</string>
+    <string name="ready_in">Pronto in:</string>
+    <string name="jar">GIARA</string>
+    <string name="serving_sizes">Dimensione della porzione</string>
+    <string name="score">Punteggio</string>
+    <string name="share">Condividi</string>
+    <string name="delete">Elimina</string>
+    <string name="recipe_update_tips">È stato trovato un totale di {{num}} ricette. Vuoi scaricarli?</string>
+    <string name="no_recipe_update_tips">Nessun nuovo pacchetto di dati della ricetta \n Attualmente l\'ultima versione</string>
+    <string name="recipe_update_process_tips">({{progress}})Scaricare dati della ricetta…</string>
+    <string name="recipe_update_finish">Aggiornamento dei dati della ricetta completato</string>
+    <string name="update_recipe_title">Aggiornamento ricetta</string>
+    <string name="restore_confirm_tips">Sei sicuro di ripristinare le impostazioni di fabbrica?</string>
+    <string name="change_lang_tips">Il programma è in esecuzione, si prega di chiudere il programma per eseguire nuovamente questa operazione!</string>
+    <string name="exit_weight_align">Calibrazione in uscita</string>
+    <string name="weight_aligning">Calibrazione...</string>
+    <string name="weight_one_kg_tips">Si prega di mettere su peso 1 Kg</string>
+    <string name="weight_two_kg_tips">Si prega di mettere su peso 2 Kg</string>
+    <string name="weight_align_success">Calibrare con successo!</string>
+    <string name="change_lang_tips2">Dopo aver cambiato lingua, le lingue delle ricette cambieranno allo stesso tempo e si riavvieranno. Sei sicuro di cambiare lingua? </string>
+    <string name="pot_clover_not_clost_tips">Il coperchio è aperto. Prima chiudi il coperchio e inizia.</string>
+    <string name="screen_saver_title">Vuoi entrare nel respiratore?</string>
+    <string name="sex">Sesso</string>
+    <string name="wight">PESO</string>
+    <string name="running_block_tips">Si prega di fermare il programma in esecuzione e avviare nuovi programmi.</string>
+    <string name="unset_target_time">Il tempo non è stato fissato.</string>
+    <string name="recipe_complete">RICETTA COMPLETA</string>
+    <string name="engjoy_your_meal">Godetevi il vostro pasto!</string>
+    <string name="gan_sao_yi_chan">Attenzione\n· Temperatura elevata\n· Nessun contenuto nella ciotola durante il riscaldamento\n· Aggiungere ingredienti, liquidi</string>
+
+    <string name="zhuan_su_fan_kui_yi_chan">Attenzione\n· Coperchio della ciotola non completamente agganciato\n· Sovraccarico del motore, consentire alla macchina di raffreddarsi, riavviare con meno contenuto della ciotola.</string>
+    <string name="dian_zi_cheng_tong_xin_yi_chan">Attenzione\n· Peso non misurato, errore di scala\n· Scala difettosa</string>
+    <string name="ntc_yi_chan"> Attenzione: NTC non funziona correttamente, si prega di contattare il servizio tecnico.</string>
+    <string name="mei_fang_guo_yi_chan">Attenzione, ciotola miscelatrice non agganciata, ciotola riposizionata</string>
+
+    <string name="empty_notice">Avviso vuoto</string>
+    <string name="press_the_button">Premere il pulsante</string>
+    <string name="please_fill_in">Si prega di compilare</string>
+    <string name="Password_is_not_the_same">La password non è la stessa</string>
+    <string name="enter">INSERISCI</string>
+    <string name="repeat">RIPETI</string>
+    <string name="automatic_recipes">Ricetta automatica</string>
+    <string name="automatic_programmes">Programmi automatici</string>
+    <string name="manual_cooking">Cottura manuale</string>
+    <string name="download_new_recipes">Scarica nuove ricette</string>
+    <string name="home">HOME</string>
+    <string name="back">RETRO</string>
+    <string name="historical_search">Ricerca storica</string>
+
+    <string name="Automatic_recipes">RICETTE AUTOMATICHE</string>
+    <string name="Automatic_programmes">PROGRAMMI AUTOMATICI</string>
+    <string name="Manual_cooking">COOKING MANUALE</string>
+    <string name="Download_new_recipes">SCARICA NUOVE RICETTE</string>
+    <string name="account_or_pwd_error">Numero di conto o password errati</string>
+    <string name="login_faild">Accesso non riuscito</string>
+
+
+    <string name="Automatic_recipes_32">RICETTE AUTOMATICHE</string>
+    <string name="Automatic_programmes_32">PROGRAMMI AUTOMATICI</string>
+    <string name="Manual_cooking_32">MODALITÀ MANUALE</string>
+    <string name="Download_new_recipes_32">SCARICA REICETTE</string>
+
+
+
+    <!-- 空炸模式 -->
+    <string name="air_fryer">Filtro dell’aria</string>
+    <string name="meat">CARNI</string>
+    <string name="fish">PESCE</string>
+    <string name="bakc">BAKC</string>
+    <string name="drumsticks">PROSCIUTTI</string>
+    <string name="chicken_wing">Wing di pollo</string>
+    <string name="vegetable">VEGETALI</string>
+    <string name="shrimp">GAMBERETTI</string>
+    <string name="pizza">PIZZA</string>
+    <string name="dehydrate">DEIDRATO</string>
+    <string name="confirm_change_dev_mode">Conferma la modifica della modalità di sviluppo?</string>
+    <string name="water_spary">SPAZIO ACQUA</string>
+    <string name="error_pot_clover_tips">La modalità di cottura corrente non è coerente con il tipo di coperchio della pentola. Vuoi passare alla modalità di cottura corrispondente?</string>
+
+
+
+    <string name="cook_eggs">CUOCI UOVA</string>
+    <string name="cook_rice">RISO COTTO</string>
+    <string name="mulsify">MULSIFICA</string>
+    <string name="puree">PUREA</string>
+    <string name="roast">ARROSTO</string>
+    <string name="smoothie">LEVIGANTE</string>
+    <string name="sovs_vide">SOVS VIDE</string>
+    <string name="auto_clean">PULIZIA AUTOMATICA</string>
+    <string name="network_error">errore di rete</string>
+    <string name="apk_version_latest">La versione dell\'app è già aggiornata.</string>
+    <string name="installing">Installazione...</string>
+    <string name="help">Aiuto</string>
+    <string name="evaluate_successfully">Valuta con successo</string>
+    <string name="reset_to_default_settings">Ripristina le impostazioni predefinite</string>
+    <string name="home_auth"><![CDATA[CASA >>]]></string>
+    <string name="rating">valutazione</string>
+    <string name="loading">Caricamento</string>
+    <string name="Min20">20Minuto</string>
+    <string name="enjoy_your_meal">Goditi il tuo pasto</string>
+    <string name="enjoy_your_meal_desc">Goditi il tuo pasto</string>
+    <string name="save_success">Salvare il successo</string>
+    <string name="reset_password_success">Ripristina la password riuscita!</string>
+    <string name="email_send">Invia e-mail</string>
+    <string name="email_not_send">Email non inviata</string>
+    <string name="the_email_has_been_already_registered">L\'email è già stata registrata</string>
+    <string name="please_fill_in_your_email">Compila la tua email</string>
+    <string name="please_fill_in_the_captcha">Compilare il captcha</string>
+    <string name="please_fill_in_the_password">Inserisci la password</string>
+    <string name="password_uncorrect">Password non corretta</string>
+    <string name="password">Password</string>
+    <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>
+
+    <!-- 029兼容翻译 -->
+    <string name="Automatic_recipes_29">Ricette interattive</string>
+    <string name="Manual_cooking_29">Cottura manuale</string>
+    <string name="Automatic_programmes_29">Programmi automatici</string>
+    <string name="Download_new_recipes_29">Scarica nuove ricette</string>
+
+
+</resources>

+ 323 - 0
app/src/brand032ETuya/res/values-pt/strings.xml

@@ -0,0 +1,323 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="not_a_member_yet">Ainda não é um %1s?</string>
+    <string name="member">membro</string>
+    <string name="select_language">Seleccionar o Idioma</string>
+    <string name="next">PRÓXIMO</string>
+    <string name="english">Inglês</string>
+    <string name="chinese">Chinês simplificado</string>
+    <string name="france">Francês</string>
+    <string name="japan">Japonês</string>
+    <string name="skip"> <![CDATA[SKIP >>]]> </string>
+    <string name="recipes">RECEITAS</string>
+    <string name="mode">MODO</string>
+    <string name="sunday">Domingo</string>
+    <string name="monday">Segunda-feira</string>
+    <string name="tuesday">Terça-feira</string>
+    <string name="wednesday">Quarta-feira</string>
+    <string name="thursday">Quinta-feira</string>
+    <string name="friday">Sexta-feira</string>
+    <string name="saturday">Sábado</string>
+    <string name="resume">RESUMO</string>
+    <string name="privacy_policy">Política de privacidade</string>
+    <string name="privacy_policy_content">1Como coletamos e usamos suas informações pessoais
+Nanfang mais cliente é uma plataforma de informação on-line desenvolvida e operada por Guangdong Nanfang jornal móvel media Co., Ltd. (doravante referido como "nós"). No processo de usar o serviço ao cliente southern plus, coletaremos as informações que você fornece ativamente ao usar o serviço ou decorrentes do uso do serviço das seguintes maneiras para fornecer serviços, otimizar nossos serviços e garantir a segurança de sua conta.</string>
+    <string name="i_agree">Concordo</string>
+    <string name="i_have_read_the_privacy_policy">Li a política de privacidade</string>
+    <string name="second">Segundo</string>
+    <string name="wifi">WIFI</string>
+    <string name="off_line">OFF-LINE</string>
+    <string name="ok">OKEY</string>
+    <string name="on_line">ON-LINE</string>
+    <string name="pwd_can_not_be_empty">O pwd não pode estar vazio!</string>
+    <string name="skin_for_now">Pele por enquanto</string>
+    <string name="login">Login</string>
+    <string name="online_recipes">Receitas Online</string>
+    <string name="cook_history">História da cozinha</string>
+    <string name="favourite_recipes">Receitas favoritas</string>
+    <string name="settings">Configuração</string>
+    <string name="grid_view">Vista da grelha</string>
+    <string name="list_view">Vista de lista</string>
+    <string name="adapted_cooking">COZINHA ADAPTADA</string>
+    <string name="scales">ESCALAS</string>
+    <string name="boil_water">ÁGUA CAIXA</string>
+    <string name="chop">CORTAR</string>
+    <string name="ferment">FERMENTOS</string>
+    <string name="slow_cook">COZINHAR LENTA</string>
+    <string name="knead_dough">DOUGH DE COELHO</string>
+    <string name="steam">VAPOR</string>
+    <string name="food_processor">PROCESSADOR ALIMENTAR</string>
+    <string name="turbo">TURBO</string>
+    <string name="language">LÍNGUA</string>
+    <string name="sound">SOM</string>
+    <string name="brightness">BRILHANTE</string>
+    <string name="user_account">CONTA DE UTILIZADOR</string>
+    <string name="storage">ARMAZENAMENTO</string>
+    <string name="reset">CONJUNTO DA FÁBRICA DE RESTORAÇÃO</string>
+    <string name="about">SOBRE</string>
+    <string name="tuya">Transferência de APP</string>
+    <string name="weight">PESO</string>
+    <string name="local_recipes">Receitas locais</string>
+    <string name="download">Transferir</string>
+    <string name="downloading">A transferir</string>
+    <string name="enter_search">Indique a pesquisa</string>
+    <string name="search">Procurar</string>
+    <string name="most_popular">Mais populares</string>
+    <string name="newest">Mais recente</string>
+    <string name="the_most_commonly_searched">O mais procurado</string>
+    <string name="notice">Aviso</string>
+    <string name="all">TODAS</string>
+    <string name="Recipes">Receitas</string>
+    <string name="ingredients">Ingredientes</string>
+    <string name="Brightness">Brilho</string>
+    <string name="screen_lock_time">Tempo de bloqueio do ecrã</string>
+    <string name="time_3min">3Min</string>
+    <string name="time_5min">5Min</string>
+    <string name="time_10min">10Min</string>
+    <string name="time_20min">20Min</string>
+    <string name="time_30min">30Min</string>
+    <string name="Sound">Som</string>
+    <string name="text_to_speech">Texto para fala</string>
+    <string name="Language">Língua</string>
+    <string name="Continue">CONTINUAR</string>
+    <string name="start_cooking">COMEÇA COZINHAR</string>
+    <string name="off">FECHADA</string>
+    <string name="on">ABRIR</string>
+    <string name="update_the_recipes">Actualizar as receitas</string>
+    <string name="apk">APK</string>
+    <string name="mcu">MCU</string>
+    <string name="tp">FW</string>
+    <string name="serial_number">SN</string>
+    <string name="standby_time">MODELO</string>
+    <string name="update">Actualizar</string>
+    <string name="About">Sobre</string>
+    <string name="are_you_sure_to_restore_factory_settings">Tem a certeza de restaurar as configurações de fábrica?</string>
+    <string name="yes">SIM</string>
+    <string name="easy">easy</string>
+    <string name="medium">medium</string>
+    <string name="hard">hard</string>
+
+    <string name="restore_factory_settings">Restaurar as configurações de fábrica</string>
+    <string name="network_wifi_status_connected_no_internet">Ligado, mas incapaz de aceder à Internet</string>
+    <string name="network_wifi_status_saved">Gravado</string>
+    <string name="network_wifi_status_idle" />
+    <string name="network_wifi_status_disabled">"Parado"</string>
+    <string name="network_wifi_status_network_failure">"Falha na configuração do endereço IP"</string>
+    <string name="network_wifi_status_wifi_failure">"Falha na ligação WLAN"</string>
+    <string name="network_wifi_status_password_failure">"Existe um problema com a autenticação"</string>
+    <string name="network_wifi_status_scanning">Digitalização...</string>
+    <string name="network_wifi_status_connecting">Ligar…</string>
+    <string name="network_wifi_status_authenticating">Autenticação em curso…</string>
+    <string name="network_wifi_status_obtaining_ip_address">obter o endereço IP…</string>
+    <string name="network_wifi_status_connected">Ligado</string>
+    <string name="network_wifi_status_suspended">Suspenso</string>
+    <string name="network_wifi_status_disconnecting">Desconectar…</string>
+    <string name="network_wifi_status_disconnected">Desligado</string>
+    <string name="network_wifi_status_failed">Falhou</string>
+    <string name="network_wifi_status_blocked">Bloqueado</string>
+    <string name="network_wifi_status_verifying_poor_link">Desligar temporariamente (mau estado de rede)</string>
+    <string name="start">COMEÇAR</string>
+    <string name="pause">PAUSE</string>
+    <string name="cancel">CANCELAR</string>
+    <string name="confirm">CONFIRMA</string>
+    <string name="stop">PARAR</string>
+    <string name="turn_right">Vire à direita</string>
+    <string name="turn_left">Vire à esquerda</string>
+    <string name="temperature">TEMPERATURA</string>
+    <string name="time">HORA</string>
+    <string name="speed">VELOCIDADE</string>
+    <string name="direction">DIRECÇÃO</string>
+    <string name="bad">Mau</string>
+    <string name="imperfect">Imperfeito</string>
+    <string name="ordinary">Ordinário</string>
+    <string name="good">Bom</string>
+    <string name="perfect">Perfeito</string>
+    <string name="are_you_sure_to_delete">Tem a certeza de apagar?</string>
+    <string name="no">NÃO</string>
+    <string name="unset_param_tips">Definir parâmetros operacionais ( Temp, Tempo e Velocidade ).</string>
+    <string name="pmpt_confirm">Confirmar</string>
+    <string name="pmpt_cancel">Cancelar</string>
+    <string name="pmpt_msg">Dicas</string>
+    <string name="dev_end_of_run_tips">Terminar!</string>
+    <string name="hight_temp_warning_tips">A temperatura atual excede 60, e a velocidade do motor excede a terceira engrenagem. De certeza que vai continuar?</string>
+    <string name="hight_temp_turbo_tips">A temperatura atual excede 60, a função turbo não pode ser operada</string>
+    <string name="update_msg">Atualização do sistema, por favor aguarde~</string>
+    <string name="update_title">É a versão mais recente?</string>
+    <string name="finish_download">Baixado</string>
+    <string name="download_fail">Falha na transferência</string>
+    <string name="start_download">Iniciar a transferência</string>
+    <string name="weight_overload_tips">Sobrecarga de pesagem</string>
+    <string name="forgot_password">Esqueceu- se da senha</string>
+    <string name="enter_email_id">Indique o ID do E- mail</string>
+    <string name="enter_password">Indique a Senha</string>
+    <string name="register">Registar</string>
+    <string name="launch_detail">Junte-se a nós hoje e desfrute das melhores despesas culinárias</string>
+    <string name="login_sign_up">Login / Registar</string>
+    <string name="skip_for_now">Saltar por agora</string>
+    <string name="reset_password">Repor a Senha</string>
+    <string name="enter_captcha">Entrar no Captcha</string>
+    <string name="send_email">Enviar e- mail</string>
+    <string name="enter_password_again">Indique a Senha de novo</string>
+    <string name="enter_the_captcha_obtained_from_the_mail">Indique o Captcha obtido a partir do correio</string>
+    <string name="nickname">Apelido</string>
+    <string name="enter_nickname">Indique a alcunha</string>
+    <string name="Gender">Sexo</string>
+    <string name="male">Homem</string>
+    <string name="age">Idade</string>
+    <string name="save">Gravar</string>
+    <string name="cancellation_of_account">Cancelamento da conta</string>
+    <string name="sign_up_it_s_free">Cadastre-se, é GRÁTIS</string>
+    <string name="pwd_requirement">Composto por letras e números, com não menos de 8 dígitos.</string>
+    <string name="please_select_age">Seleccione por favor a idade</string>
+    <string name="cancel_lower">Cancelar</string>
+    <string name="female">Feminino</string>
+    <string name="tare">TARA</string>
+    <string name="keep_cooking_in_the_background">Continuas a cozinhar ao fundo?</string>
+    <string name="reset_button">REPOR</string>
+    <string name="finish">Acabar!</string>
+    <string name="error">Erro</string>
+    <string name="download_failed">Falha no download</string>
+    <string name="warning">Aviso!</string>
+    <string name="lid_unlock">Desbloqueio da tampa</string>
+    <string name="share_with_more_people">Compartilhe com mais pessoas</string>
+    <string name="scan_qr_code_with_camera">Digitalize o código QR com a câmera</string>
+    <string name="enter_what_you_want_to_say">Digite o que você quer dizer</string>
+    <string name="note_title">TÍTULO DA NOTA</string>
+    <string name="type_your_notes_here">Digite suas anotações aqui</string>
+    <string name="make_1_jar">FAZ 1 JAR</string>
+    <string name="make_n_jars">FABRICA FRASCOS %1s</string>
+    <string name="per_serving">Por Dose</string>
+    <string name="preparation">Preparação:</string>
+    <string name="hours">h</string>
+    <string name="min">min</string>
+    <string name="ready_in">Pronto em:</string>
+    <string name="jar">JARRO</string>
+    <string name="serving_sizes">Tamanhos das porções</string>
+    <string name="score">Pontuação</string>
+    <string name="share">Compartilhar</string>
+    <string name="delete">Excluir</string>
+    <string name="recipe_update_tips">Um total de {{num}} receitas foram encontradas.  Deseja baixá-los?</string>
+    <string name="no_recipe_update_tips">Nenhum novo pacote de dados de receita \n Atualmente a versão mais recente</string>
+    <string name="recipe_update_process_tips">({{progresso}})  Download de dados de receitas...</string>
+    <string name="recipe_update_finish">Atualização de dados da receita concluída</string>
+    <string name="update_recipe_title">Atualização de receita</string>
+    <string name="restore_confirm_tips">Tem certeza de restaurar as configurações de fábrica?</string>
+    <string name="change_lang_tips">O programa está em execução, feche o programa para executar esta operação novamente!</string>
+    <string name="exit_weight_align">Calibração de saída</string>
+    <string name="weight_aligning">Calibrar..</string>
+    <string name="weight_one_kg_tips">Por favor, coloque em peso 1 KGS</string>
+    <string name="weight_two_kg_tips">Por favor, coloque em peso 2 KGS</string>
+    <string name="weight_align_success">Calibre com sucesso!</string>
+    <string name="change_lang_tips2">Depois de mudar o idioma, os idiomas da receita serão alterados ao mesmo tempo e reiniciados.  Tem certeza de mudar o idioma?</string>
+    <string name="pot_clover_not_clost_tips">A tampa está destravada.  Por favor, bloqueie a tampa primeiro e comece.</string>
+    <string name="screen_saver_title">Quer entrar na tela de respiração?</string>
+    <string name="sex">Sexo</string>
+    <string name="wight">PESO</string>
+    <string name="running_block_tips">Por favor, pare o programa em execução e inicie novos programas.</string>
+    <string name="unset_target_time">O tempo ainda não foi definido.</string>
+    <string name="recipe_complete">RECEITA CONCLUÍDA</string>
+    <string name="engjoy_your_meal">APROVEITE A SUA REFEIÇÃO!</string>
+    <string name="gan_sao_yi_chan">Atenção\n·  Alta temperatura\n·  Nenhum conteúdo na tigela ao aquecer\n·  Adicionar ingredientes, líquidos</string>
+
+    <string name="zhuan_su_fan_kui_yi_chan">Aviso\n·  Tampa da tigela não totalmente engatada\n·  Sobrecarga do motor, permitir que a máquina esfrie, reiniciar com menos conteúdo de tigela.</string>
+    <string name="dian_zi_cheng_tong_xin_yi_chan">Atenção\n·  Não foi aferido peso, erro de balança\n·  Escala defeituosa</string>
+    <string name="ntc_yi_chan"> Atenção: NTC não está funcionando corretamente, entre em contato com o serviço técnico.</string>
+    <string name="mei_fang_guo_yi_chan">Atenção\n·  Tigela de mistura não engatada, tigela de reposição</string>
+
+    <string name="empty_notice">Aviso vazio</string>
+    <string name="press_the_button">Pressione o botão</string>
+    <string name="please_fill_in">Por favor, preencha</string>
+    <string name="Password_is_not_the_same">A senha não é a mesma</string>
+    <string name="enter">ENTRAR</string>
+    <string name="repeat">REPETIR</string>
+    <string name="automatic_recipes">Automático\nreceitas</string>
+    <string name="automatic_programmes">Automático\nProgramas</string>
+    <string name="manual_cooking">Manual\nCozinhar</string>
+    <string name="download_new_recipes">Baixar\nnovas receitas</string>
+    <string name="home">Página inicial</string>
+    <string name="back">BACK</string>
+    <string name="historical_search">Pesquisa histórica</string>
+
+    <string name="Automatic_recipes">RECEITAS AUTOMÁTICAS</string>
+    <string name="Automatic_programmes">PROGRAMAS AUTOMÁTICOS</string>
+    <string name="Manual_cooking">COZINHA MANUAL</string>
+    <string name="Download_new_recipes">BAIXAR NOVOS RECIPTOS</string>
+    <string name="account_or_pwd_error">Número da conta ou senha incorretas</string>
+    <string name="login_faild">Número da conta ou senha incorretas</string>
+
+
+    <string name="Automatic_recipes_32">RECEITAS AUTOMÁTICAS</string>
+    <string name="Automatic_programmes_32">PROGRAMAS AUTOMATICOS</string>
+    <string name="Manual_cooking_32">MODO\nMANUAL</string>
+    <string name="Download_new_recipes_32">DOWNLOAD RECEITAS</string>
+
+
+
+    <!-- Modo de explosão de ar-->
+    <string name="air_fryer">AIR FRYER</string>
+    <string name="meat">CARNE</string>
+    <string name="fish">PEIXES</string>
+    <string name="bakc">BAKC</string>
+    <string name="drumsticks">BAQUETAS</string>
+    <string name="chicken_wing">ASA DE FRANGO</string>
+    <string name="vegetable">PRODUTOS</string>
+    <string name="shrimp">CAMARÃO</string>
+    <string name="pizza">PIZZA</string>
+    <string name="dehydrate">DEHIDRATO</string>
+    <string name="confirm_change_dev_mode">Confirmar mudar o modo de desenvolvimento?</string>
+    <string name="water_spary">ESPAÇO DE ÁGUA</string>
+    <string name="error_pot_clover_tips">O modo de cozimento atual não é consistente com o tipo de tampa da panela. Deseja mudar para o modo de cozedura correspondente?</string>
+
+
+
+    <string name="cook_eggs">OVOS DE COZINHA</string>
+    <string name="cook_rice">ARZ DE COZINHA</string>
+    <string name="mulsify">EMULSÃO</string>
+    <string name="puree">PURÉ</string>
+    <string name="roast">ROAST</string>
+    <string name="smoothie">SMOOTHIE</string>
+    <string name="sovs_vide">VÍDEO SOVS</string>
+    <string name="auto_clean">AUTO LIMPO</string>
+    <string name="network_error">erro de rede</string>
+    <string name="apk_version_latest">A versão do aplicativo já está atualizada.</string>
+    <string name="installing">Instalar...</string>
+    <string name="help">Ajuda</string>
+    <string name="evaluate_successfully">Avalie com sucesso</string>
+    <string name="reset_to_default_settings">Redefinir para as configurações padrão</string>
+    <string name="home_auth"><![CDATA[HOME >>]]></string>
+    <string name="rating">classificação</string>
+    <string name="loading">Carregamento</string>
+    <string name="Min20">20Min</string>
+    <string name="enjoy_your_meal">APROVEITE A SUA REFEIÇÃO</string>
+    <string name="enjoy_your_meal_desc">Desfrute da sua refeição</string>
+    <string name="save_success">Salve o sucesso</string>
+    <string name="reset_password_success">Repor a senha de sucesso!</string>
+    <string name="email_send">Enviar e- mail</string>
+    <string name="email_not_send">E- mail não enviado</string>
+    <string name="the_email_has_been_already_registered">O e-mail já foi registado</string>
+    <string name="please_fill_in_your_email">Por favor, preencha o seu e-mail</string>
+    <string name="please_fill_in_the_captcha">Por favor preencha o captcha</string>
+    <string name="please_fill_in_the_password">Por favor, preencha a senha</string>
+    <string name="password_uncorrect">Senha não corrigida</string>
+    <string name="password">Senha</string>
+    <string name="dev_error">Atenção: O dispositivo é anormal, verifique por favor o dispositivo</string>
+    <string name="login_expire_tips">Não foi possível aceder, tente novamente</string>
+    <string name="add_to_favourite">Adicionar ao favorito</string>
+    <string name="verify_code_uncorrect">Verificar o código não correcto</string>
+    <string name="success">Sucesso</string>
+    <string name="no_net_error">Por favor, ligue-se ao Wifi</string>
+    <string name="no_login">Por favor, insira os campos acima para fazer login</string>
+    <string name="wrong_captcha">Captcha errada</string>
+
+
+
+
+    <!-- 029兼容翻译 -->
+    <string name="Automatic_recipes_29">Receltas interactivas</string>
+    <string name="Manual_cooking_29">Cozinha manual</string>
+    <string name="Automatic_programmes_29">Automatic programs</string>
+    <string name="Download_new_recipes_29">Descarregar novas receitas</string>
+
+
+
+</resources>

+ 1 - 1
app/src/brand063BTuya/res/values-en/strings.xml

@@ -182,7 +182,7 @@ Nanfang plus client is an online information platform developed and operated by
     <string name="dev_remove_orange_parts">The machine is in twisted orange mode, please remove the current accessory.</string>
     <string name="dev_dice_and_peel_tips">In order to use the program, it is necessary to have and install the appropriate attachment.</string>
 
-    <string name="hight_temp_warning_tips">The current temperature exceeds 60, and the motor speed exceeds the third gear. Are you sure to continue?</string>
+    <string name="hight_temp_warning_tips">The temperature exceeds 60℃ and the speed level exceeds level 3.Exercise extreme caution and avoid blending at high temperatures and speeds, as this can cause splashing and pose a risk of burns. Are you sure to continue?</string>
     <string name="hight_temp_turbo_tips">The current temperature exceeds 60, turbo function cannot be operated</string>
     <string name="update_msg">System updating, please wait~</string>
     <string name="update_title">Do you want to upgrade to the new version?</string>

+ 1 - 1
app/src/main/AndroidManifest.xml

@@ -32,7 +32,7 @@
 
     <application
         android:name=".FoodCookingApp"
-        android:allowBackup="false"
+        android:allowBackup="true"
         android:dataExtractionRules="@xml/data_extraction_rules"
         android:fullBackupContent="@xml/backup_rules"
         android:icon="@mipmap/ic_launcher"

+ 119 - 107
app/src/main/java/com/develop/foodcooking/FoodCookingApp.kt

@@ -41,6 +41,7 @@ import com.develop.common.food_sdk.GlobalDevEvent
 import com.develop.common.food_sdk.SerialPortUtils
 import com.develop.common.tag.CURRENT_USER_ID
 import com.develop.common.tag.MODEL
+import com.develop.common.utils.AppVersionUtil
 import com.develop.common.utils.StringUtils
 import com.develop.common.utils.TuyaUtils
 import com.develop.common.utils.compat.RecyclerViewCompat
@@ -55,6 +56,9 @@ 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
 import com.kuyuntech.cofarcooking.device.sdk.util.core.CofarSDK
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.GlobalScope
+import kotlinx.coroutines.launch
 import org.alee.component.skin.compat.ConstraintLayoutCompat
 import org.alee.component.skin.page.WindowManager
 import org.alee.component.skin.service.Config
@@ -98,8 +102,7 @@ class FoodCookingApp : BaseApp() {
     override fun onCreate() {
         hookWebView()
         super.onCreate()
-
-
+        AppVersionUtil.startRecord()
         //处理崩溃问题
 //        CrashHandler.getInstance().init(this);
         //FoodDataProvider.initFoodDataBase()
@@ -109,123 +112,131 @@ class FoodCookingApp : BaseApp() {
 //        CatchException.getInstence().init(this)
 
 
-        WindowManager.getInstance().init(this, OptionFactory())
 
-        setAppCode(BuildConfig.appCode)
-        var UpdatePlatform = BuildConfig.UpdatePlatform
-        val isNight = UpdatePlatform.equals("night")
-        val is062 = UpdatePlatform.equals("062A")
-        val is011 = UpdatePlatform.equals("011")
-        setIsBrand036I(UpdatePlatform.equals("036I"))
-        setIsBrand054A(UpdatePlatform.equals("054A"))
-        setIsBrand011A(is011)
-        setIsBrand062(is062)
-        if (BuildConfig.brandCode.startsWith("010")) {
-            MMkvUtils.save("appTime", BuildConfig.time)
-        }
-        if (is062) {
-            ResourceUtils.copyFileFromAssets(
-                ASSETS_BLUE_SKIN_PACK,
-                SKIN_PACK_PATH + BLUE_SKIN_PACK_NAME
-            )
-        }
-        if (is011) {
-            ResourceUtils.copyFileFromAssets(
-                ASSETS_ZERO_ONE_ONE_SKIN_PACK,
-                SKIN_PACK_PATH + ZERO_ONE_ONE_SKIN_PACK_NAME
-            )
-        }
-        if (isNight) {
-            ResourceUtils.copyFileFromAssets(
-                ASSETS_NIGHT_SKIN_PACK,
-                SKIN_PACK_PATH + NIGHT_SKIN_PACK_NAME
-            )
-        }
+
+        GlobalScope.launch(Dispatchers.IO){
+            WindowManager.getInstance().init(application, OptionFactory())
+            setAppCode(BuildConfig.appCode)
+            var UpdatePlatform = BuildConfig.UpdatePlatform
+            val isNight = UpdatePlatform.equals("night")
+            val is062 = UpdatePlatform.equals("062A")
+            val is011 = UpdatePlatform.equals("011")
+            setIsBrand036I(UpdatePlatform.equals("036I"))
+            setIsBrand054A(UpdatePlatform.equals("054A"))
+            setIsBrand011A(is011)
+            setIsBrand062(is062)
+            if (BuildConfig.brandCode.startsWith("010")) {
+                MMkvUtils.save("appTime", BuildConfig.time)
+            }
+            if (is062) {
+                ResourceUtils.copyFileFromAssets(
+                    ASSETS_BLUE_SKIN_PACK,
+                    SKIN_PACK_PATH + BLUE_SKIN_PACK_NAME
+                )
+            }
+            if (is011) {
+                ResourceUtils.copyFileFromAssets(
+                    ASSETS_ZERO_ONE_ONE_SKIN_PACK,
+                    SKIN_PACK_PATH + ZERO_ONE_ONE_SKIN_PACK_NAME
+                )
+            }
+            if (isNight) {
+                ResourceUtils.copyFileFromAssets(
+                    ASSETS_NIGHT_SKIN_PACK,
+                    SKIN_PACK_PATH + NIGHT_SKIN_PACK_NAME
+                )
+            }
 
 
-        //切换主题,theme=0 night= false 是0000的主题,而且需要AndroidManifest.xml主题设置为  android:theme="@style/SplashTheme"
-        ThemeSkinService.getInstance()
-            .switchThemeSkin(if (isNight) 1 else if (is062) 2 else if (is011) 3 else 0)
+            //切换主题,theme=0 night= false 是0000的主题,而且需要AndroidManifest.xml主题设置为  android:theme="@style/SplashTheme"
+            ThemeSkinService.getInstance()
+                .switchThemeSkin(if (isNight) 1 else if (is062) 2 else if (is011) 3 else 0)
 
-        //由于之前011黑色风格 故在这做 011兼容, 这个判断,不能在设置皮肤前面
-        if (isNight || is011) {
-            setNightTheme(true)
+            //由于之前011黑色风格 故在这做 011兼容, 这个判断,不能在设置皮肤前面
+            if (isNight || is011) {
+                setNightTheme(true)
+            }
+            AppVersionUtil.endRecord("ThemeSkinService")
         }
+
         CofarSDK.init(getBrandNum())
         SerialPortUtils.init()
         CofarSDK.register(this)
         //MainActvity 加了这个代码,在这注释
 //        CofarSDK.stopNative()
 
-        Thread {
-            var isUpdateFile = StringUtils.doesUpdateTxtFileExist()
-            //之前根据zip包的md5 更新,现在做一个文本获取进行更新, 先判断是否存在,存在再处理,不存在就走之前的方法
-            Log.d("TAG update", "isUpdateFile  文件: $isUpdateFile")
-            if (isUpdateFile) {
-                Log.d("TAG update", "isUpdateFile  文件存在 ")
-                var fileUpdate = StringUtils.getUpdateTime()
-                var roomUpdate = getUpdateRecipeTime()
-
-                Log.d("TAG update", "fileUpdate :   $fileUpdate")
-                Log.d("TAG update", "roomUpdate :   $roomUpdate")
-
-
-                FoodDataProvider.setUpdateTime(fileUpdate)
-                //当本地时间为空,或者file的文件时间比本地时间大的时候,证明食谱包更新了
-                if (roomUpdate == "" || fileUpdate.toLong() > roomUpdate.toLong()) {
-                    Log.d("TAG update", "isUpdateFile1111111--------  文件存在 ")
-
-                    //删除room数据库
-                    deleteRoomDb()
-                    //删除sd卡的东西
-                    FoodDataProvider.deleteAll()
-                    FoodDataProvider.prepareData(this)
-                } else {
-                    FoodDataProvider.prepareData(this)
-                }
-
+        //食谱解压
+//        Thread {
+//            var isUpdateFile = StringUtils.doesUpdateTxtFileExist()
+//            //之前根据zip包的md5 更新,现在做一个文本获取进行更新, 先判断是否存在,存在再处理,不存在就走之前的方法
+//            Log.d("TAG update", "isUpdateFile  文件: $isUpdateFile")
+//            if (isUpdateFile) {
+//                Log.d("TAG update", "isUpdateFile  文件存在 ")
+//                var fileUpdate = StringUtils.getUpdateTime()
+//                var roomUpdate = getUpdateRecipeTime()
+//
+//                Log.d("TAG update", "fileUpdate :   $fileUpdate")
+//                Log.d("TAG update", "roomUpdate :   $roomUpdate")
+//
+//
+//                FoodDataProvider.setUpdateTime(fileUpdate)
+//                //当本地时间为空,或者file的文件时间比本地时间大的时候,证明食谱包更新了
+//                if (roomUpdate == "" || fileUpdate.toLong() > roomUpdate.toLong()) {
+//                    Log.d("TAG update", "isUpdateFile1111111--------  文件存在 ")
+//
+//                    //删除room数据库
+//                    deleteRoomDb()
+//                    //删除sd卡的东西
+//                    FoodDataProvider.deleteAll()
+//                    FoodDataProvider.prepareData(this)
+//                } else {
+//                    FoodDataProvider.prepareData(this)
+//                }
+//
+//
+//
+//            } else {
+//                val md5 = getOtaFileMd5()
+//                val sn = getSN()
+//                Log.d("TAG md5", "time :" + System.currentTimeMillis())
+//                //大概50秒才获取到
+////            val zipMd2 = StringUtils.getFileMD5("system/media/cofa_cooking.zip")
+//                Log.d("TAG md5", "md5 :$md5")
+//                var zipMd5 = ""
+//                if (md5.isNotEmpty()) {
+//                    zipMd5 = FileUtils.getFileMD5ToString("system/media/cofa_cooking.zip")
+//                }
+//                Log.d("TAG md5", "time2222 :" + System.currentTimeMillis())
+//                Log.d("TAG md5", "string :$zipMd5")
+//                //处理ota食谱更新问题
+//                if (sn.startsWith("010") && (md5.isEmpty() || md5 != zipMd5)) {
+//                    /**
+//                     *  如果MD5的值不存在,重新解压
+//                     *  如果MD5的值不一样的,就代表食谱包已经重新更新
+//                     *  需要先删除sd卡目录下的cofa文件,再重新解压
+//                     * */
+//                    deleteRoomDb()
+//
+//                    //删除sd卡的东西
+//                    FoodDataProvider.deleteAll()
+//
+//
+//                    FoodDataProvider.prepareData(this)
+//                } else {
+//                    FoodDataProvider.prepareData(this)
+//                }
+//                //010 每一次都把md5的值set进去
+//                if (sn.startsWith("010")) {
+//                    //优化启动程序
+//                    if (zipMd5.isEmpty()) {
+//                        zipMd5 = FileUtils.getFileMD5ToString("system/media/cofa_cooking.zip")
+//                    }
+//                    setOtaFileMd5(zipMd5)
+//                }
+//            }
+//        }.start()
 
 
-            } else {
-                val md5 = getOtaFileMd5()
-                val sn = getSN()
-                Log.d("TAG md5", "time :" + System.currentTimeMillis())
-                //大概50秒才获取到
-//            val zipMd2 = StringUtils.getFileMD5("system/media/cofa_cooking.zip")
-                Log.d("TAG md5", "md5 :$md5")
-                var zipMd5 = ""
-                if (md5.isNotEmpty()) {
-                    zipMd5 = FileUtils.getFileMD5ToString("system/media/cofa_cooking.zip")
-                }
-                Log.d("TAG md5", "time2222 :" + System.currentTimeMillis())
-                Log.d("TAG md5", "string :$zipMd5")
-                //处理ota食谱更新问题
-                if (sn.startsWith("010") && (md5.isEmpty() || md5 != zipMd5)) {
-                    /**
-                     *  如果MD5的值不存在,重新解压
-                     *  如果MD5的值不一样的,就代表食谱包已经重新更新
-                     *  需要先删除sd卡目录下的cofa文件,再重新解压
-                     * */
-                    deleteRoomDb()
-
-                    //删除sd卡的东西
-                    FoodDataProvider.deleteAll()
-
-
-                    FoodDataProvider.prepareData(this)
-                } else {
-                    FoodDataProvider.prepareData(this)
-                }
-                //010 每一次都把md5的值set进去
-                if (sn.startsWith("010")) {
-                    //优化启动程序
-                    if (zipMd5.isEmpty()) {
-                        zipMd5 = FileUtils.getFileMD5ToString("system/media/cofa_cooking.zip")
-                    }
-                    setOtaFileMd5(zipMd5)
-                }
-            }
-        }.start()
 //        val powerManager = getSystemService(POWER_SERVICE) as PowerManager
 //        val wakeLock: PowerManager.WakeLock =
 //            powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "motionDetection:keepAwake")
@@ -256,7 +267,7 @@ class FoodCookingApp : BaseApp() {
                     .build()
             )
         }.start()
-
+        AppVersionUtil.endRecord("Application END")
 
     }
 
@@ -347,6 +358,7 @@ class FoodCookingApp : BaseApp() {
 
     override fun attachBaseContext(base: Context?) {
         super.attachBaseContext(base)
+
         //把这个方法放到onCreate 处理ota问题
 //        FoodDataProvider.prepareData(this)
 

+ 13 - 6
app/src/main/java/com/develop/foodcooking/MainActivity.kt

@@ -2,11 +2,13 @@ package com.develop.foodcooking
 
 import android.content.Context
 import android.os.Bundle
+import android.os.Debug
 import android.util.DisplayMetrics
 import android.util.Log
 import android.view.LayoutInflater
 import android.view.WindowManager
 import androidx.lifecycle.scopeNetLife
+import com.develop.base.ext.globalApp
 import com.develop.base.ext.isBrand062
 import com.develop.base.ext.navigateTo
 import com.develop.base.ext.setScreenHeight
@@ -26,6 +28,7 @@ import com.develop.common.tag.CURRENT_LANGUAGE
 import com.develop.common.tag.FIRST_IN
 import com.develop.common.tag.ISTUYA
 import com.develop.common.ui.CommonBindingActivity
+import com.develop.common.utils.AppVersionUtil
 import com.develop.common.utils.ConfigUtils
 import com.develop.common.utils.TuyaUtils
 import com.develop.foodcooking.databinding.ActivityMainBinding
@@ -42,6 +45,10 @@ class MainActivity : CommonBindingActivity<ActivityMainBinding>() {
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
+
+        //食谱解压
+        AppVersionUtil.getRecipe(globalApp())
+
         getScreen()
         /**
          *  这个代码千万别注释,需要初始化FloatWindowManager
@@ -56,22 +63,22 @@ class MainActivity : CommonBindingActivity<ActivityMainBinding>() {
          * */
         FloatWindowManager.hideStepFlowWindow()
         CofarSDK.stopNative()
-
         if (MMkvUtils.getBool(FIRST_IN)) {
             if (isBrand062()){
                 navigateTo(Screens.Main.ENTRANCE_CHOSEN_TWO)
             }else{
                 navigateTo(Screens.Main.ENTRANCE_CHOSEN)
             }
+            AppVersionUtil.endRecord("MainActivity")
         } else {
             //机器首次开机时会出现两段开机动画,这样给用户的感觉开机时长太长了,因此决定去掉后面apk显示的那一段开机动画
             navigateTo(Screens.Setting.LANGUAGE)
+            AppVersionUtil.endRecord("MainActivity")
+
 //            navigateTo(Screens.Main.ENTRANCE_CHOSEN)
         }
 
 
-
-
         getDevInfo()
     }
 
@@ -117,9 +124,9 @@ class MainActivity : CommonBindingActivity<ActivityMainBinding>() {
         println("涂鸦请求3 : $json")
         if (result.tuyaLicense != null) {
             result.tuyaLicense?.let {
-                TuyaUtils.mAk = it.ak
-                TuyaUtils.mPid = it.pid
-                TuyaUtils.mUid = it.uuid
+                TuyaUtils.mAk = it.ak.toString().trim()
+                TuyaUtils.mPid = it.pid.toString().trim()
+                TuyaUtils.mUid = it.uuid.toString().trim()
                 TuyaUtils.initSDK(this, "1.0.0")
                 //涂鸦存值判断有涂鸦功能
                 MMkvUtils.save(ISTUYA, true)

+ 31 - 25
libBase/src/main/java/com/develop/base/app/BaseApp.kt

@@ -28,6 +28,9 @@ import com.scwang.smart.refresh.header.MaterialHeader
 import com.scwang.smart.refresh.layout.SmartRefreshLayout
 import com.tencent.bugly.crashreport.CrashReport
 import com.tencent.bugly.crashreport.CrashReport.UserStrategy
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.GlobalScope
+import kotlinx.coroutines.launch
 import okhttp3.Cache
 import java.util.concurrent.TimeUnit
 
@@ -63,42 +66,45 @@ abstract class BaseApp : Application() {
 
     /** 初始化Net库 */
     private fun initNet() {
-        //host - 请求url的主机名, 该参数会在每次请求时自动和请求路径进行拼接(如果路径包含https/http则不会拼接)
-        NetConfig.initialize(createHostUrl(), this) {
-            //超时设置
-            connectTimeout(15, TimeUnit.SECONDS)
-            readTimeout(15, TimeUnit.SECONDS)
-            writeTimeout(15, TimeUnit.SECONDS)
+        GlobalScope.launch(Dispatchers.IO){
+            //host - 请求url的主机名, 该参数会在每次请求时自动和请求路径进行拼接(如果路径包含https/http则不会拼接)
+            NetConfig.initialize(createHostUrl(), application) {
+                //超时设置
+                connectTimeout(15, TimeUnit.SECONDS)
+                readTimeout(15, TimeUnit.SECONDS)
+                writeTimeout(15, TimeUnit.SECONDS)
 
-            // 本框架支持Http缓存协议和强制缓存模式
-            // 缓存设置, 当超过maxSize最大值会根据最近最少使用算法清除缓存来限制缓存大小
-            cache(Cache(cacheDir, 1024 * 1024 * 128))
+                // 本框架支持Http缓存协议和强制缓存模式
+                // 缓存设置, 当超过maxSize最大值会根据最近最少使用算法清除缓存来限制缓存大小
+                cache(Cache(cacheDir, 1024 * 1024 * 128))
 
-            // LogCat是否输出异常日志, 异常日志可以快速定位网络请求错误
-            setDebug(BuildConfig.DEBUG)
+                // LogCat是否输出异常日志, 异常日志可以快速定位网络请求错误
+                setDebug(BuildConfig.DEBUG)
 
-            // AndroidStudio OkHttp Profiler 插件输出网络日志
-            addInterceptor(LogRecordInterceptor(BuildConfig.DEBUG))
+                // AndroidStudio OkHttp Profiler 插件输出网络日志
+                addInterceptor(LogRecordInterceptor(BuildConfig.DEBUG))
 
-            // 添加持久化Cookie管理
-            cookieJar(PersistentCookieJar(this@BaseApp))
+                // 添加持久化Cookie管理
+                cookieJar(PersistentCookieJar(this@BaseApp))
 
-            // 添加请求拦截器, 可配置全局/动态参数(MyRequestInterceptor自定义)
-            setRequestInterceptor(createRequestInterceptor())
+                // 添加请求拦截器, 可配置全局/动态参数(MyRequestInterceptor自定义)
+                setRequestInterceptor(createRequestInterceptor())
 
-            // 数据转换器
-            setConverter(createConverter())
+                // 数据转换器
+                setConverter(createConverter())
 
-            //全局错误处理
-            setErrorHandler(createErrorHandle())
+                //全局错误处理
+                setErrorHandler(createErrorHandle())
 
-            //信任所有证书
-            trustSSLCertificate()
+                //信任所有证书
+                trustSSLCertificate()
 //            sslSocketFactory(Utils.createSSLSocketFactory())
 
-            // 自定义全局加载对话框
-            // setDialogFactory()
+                // 自定义全局加载对话框
+                // setDialogFactory()
+            }
         }
+
     }
 
     /** 初始化第三方依赖库 */

+ 5 - 4
libBase/src/main/java/com/develop/base/ext/GlobaExt.kt

@@ -208,7 +208,7 @@ fun getSN(): String {
 //    return "011E50370020123010190001"
 //    return  "033H20020020123010190001"
 
-
+    return "032D21060020123010190001"
 
     if (BuildConfig.DEBUG) {
 //        return "002D10390020123010190001"
@@ -233,7 +233,7 @@ fun getSN(): String {
 //    return "010D10390020123010190001"
 //        return "010D10390020123010190001"
 //    return "000A10390020123010190009"
-//        return "032D21060020123010190001"
+        return "032D21060020123010190001"
 //        return "000A50370020123010190011"
 //         return  "030A10390020123010190002"
 //        return  "033F20020020123010190001"
@@ -254,9 +254,10 @@ fun getSN(): String {
 //        return  "049B10390020123010190001"
 //        return "000A50370020123010190017"
 //        return  "053A10390020123010190001"
-        return  "000A10390020123010190023"
+//        return  "000A10390020123010190023"
 //        return  "000A21050020123010190023"
 //        return "000A50670020123010190005"
+//        return  "033H19050020123010190001"
     } else {
         //通过反射获取sn号
         try {
@@ -282,7 +283,7 @@ fun getSN(): String {
 
 fun getGoneLogin(): Boolean {
     var sn = getSN()
-    return sn.startsWith("032D") || sn.startsWith("011")
+    return sn.startsWith("032D") ||sn.startsWith("032E") || sn.startsWith("011")
             || sn.startsWith("030A") || sn.startsWith("010F")
             || sn.startsWith("033")
 }