Browse Source

010 OTA更新代码

zhangshenjie 10 months ago
parent
commit
69cc185fba

+ 12 - 3
BusinessCommon/src/main/java/com/develop/common/data_repo/FoodDataProvider.kt

@@ -48,6 +48,7 @@ object FoodDataProvider {
     private val RES_DST_PATH = File(TARGET_DST_PARENT, "cofa_cooking")
     private val SUCCESS_FLAG = File(TARGET_DST_PARENT, "success.lock")
 
+
     init {
         if (!RES_DST_PARENT.exists()) {
             RES_DST_PARENT.mkdirs()
@@ -58,6 +59,7 @@ object FoodDataProvider {
     fun prepareData(application: Application) {
         var isSuccess = true
         ThreadUtils.runOnWorkThread({
+
             if (RES_DST_PATH.exists() && SUCCESS_FLAG.exists()) {
                 validateDatabaseFile()
                 preparedLock.countDown()
@@ -87,8 +89,13 @@ object FoodDataProvider {
 
                 FileUtils.delete(RES_DST_PATH)
 
+                /**
+                 *
+                 *ZIP_PATH = system/media/cofa_cooking.zip
+                 *ZIP_PATH_V1 = vendor/bundled_uninstall_back-app/cofa_cooking/cofa_cooking.zip
+                 *ZIP_PATH_V0_1 = sdcard/cookbook/cofa_cooking.zip
+                 * */
                 try {
-
                     //TODO 旧版路径兼容
                     var targetZipFile = ZIP_PATH
                     if(!targetZipFile.exists()){
@@ -98,7 +105,10 @@ object FoodDataProvider {
                     if(!targetZipFile.exists()){
                         targetZipFile = ZIP_PATH_V0_1
                     }
-
+                    /**
+                     * TARGET_DST_PARENT = sdcard/
+                     * RES_DST_PATH = sdcard/cofa_cooking
+                     * */
                     val start = System.currentTimeMillis()
                     ZipUtils.unzipFile(targetZipFile, TARGET_DST_PARENT)
                     Log.d(
@@ -128,7 +138,6 @@ object FoodDataProvider {
                     fw.write(formattedDate)
                     fw.flush()
                     fw.close()
-
                     Log.d("FoodDataProvider", "数据解压成功!")
                 } else {
                     Log.d("FoodDataProvider", "数据包解压失败! 请检查数据包")

+ 29 - 0
BusinessCommon/src/main/java/com/develop/common/utils/StringUtils.java

@@ -3,6 +3,9 @@ package com.develop.common.utils;
 import android.content.Context;
 import android.util.DisplayMetrics;
 
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.security.MessageDigest;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -39,5 +42,31 @@ public class StringUtils {
         }
     }
 
+    public static String getFileMD5(String filePath) {
+        MessageDigest md5 = null;
+        try {
+            md5 = MessageDigest.getInstance("MD5");
+            InputStream fis = new FileInputStream(filePath);
+            byte[] buffer = new byte[1024];
+            int numRead = 0;
+            while ((numRead = fis.read(buffer)) > 0) {
+                md5.update(buffer, 0, numRead);
+            }
+            fis.close();
+            return toHexString(md5.digest());
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    private static String toHexString(byte[] bytes) {
+        StringBuilder sb = new StringBuilder();
+        for (byte b : bytes) {
+            sb.append(String.format("%02x", b));
+        }
+        return sb.toString();
+    }
+
 
 }

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

@@ -118,7 +118,7 @@ Nanfang plus client is an online information platform developed and operated by
     <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" />

+ 2 - 1
BusinessCommon/src/main/res/values-tr/strings.xml

@@ -94,6 +94,7 @@ Nanfang Plus Client, Guangdong Nanfang Newspaper Mobile Media Co, Ltd (bundan b
     <string name="are_you_sure_to_restore_factory_settings">Fabrika ayarlarına geri dönmek istediğinizden emin misiniz?</string>
     <string name="yes">EVET</string>
     <string name="restore_factory_settings">Fabrika ayarlarına geri dön</string>
+    <string name="connected_successfully">Bağlantı başarılı</string>
     <string name="network_wifi_status_connected_no_internet">Bağlantı kuruldu, ancak İnternet’e erişilemiyor</string>
     <string name="network_wifi_status_saved">Kaydedildi</string>
     <string name="network_wifi_status_idle" />
@@ -274,7 +275,7 @@ Nanfang Plus Client, Guangdong Nanfang Newspaper Mobile Media Co, Ltd (bundan b
     <string name="help">Yardım</string>
     <string name="evaluate_successfully">Değerlendirme başarılı</string>
     <string name="reset_to_default_settings">Varsayılan ayarlara geri dön</string>
-    <string name="home_auth"><![CDATA[HOME >>]]></string>
+    <string name="home_auth"><![CDATA[ANASAYFA >>]]></string>
     <string name="rating">değerlendirme</string>
     <string name="loading">Yükleniyor</string>
     <string name="Min20">20Dk</string>

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

@@ -105,6 +105,7 @@ Nanfang plus client is an online information platform developed and operated by
     <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" />

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

@@ -36,6 +36,7 @@ import com.develop.common.router.Screens
 import com.develop.common.tag.*
 import com.develop.common.ui.CommonBindingActivity
 import com.develop.common.utils.AppVersionUtil
+import com.develop.common.utils.StringUtils
 import com.develop.common.utils.UpdateUtil
 import com.develop.common.widget.EntranceData
 import com.develop.common.widget.EntranceItemView
@@ -86,6 +87,7 @@ class ModeEntranceActivity : CommonBindingActivity<ActivityModeEntranceBinding>(
         devMode = CofarSDK.devInfo().devMode
         isModelNum = getModelNum()
         isResetZero = CofarSDK.devInfo().resetZero.toInt()
+
         prepareDataLiveData = FoodDataProvider.getPrepareLiveData() as MutableLiveData<Boolean>
         prepareDataLiveData.observe(this) {
             loadingDialog.removeSelf()

+ 12 - 1
BusinessSetting/src/main/java/com/develop/setting/ui/AboutActivity.kt

@@ -5,6 +5,7 @@ import android.content.*
 import android.content.pm.PackageInstaller
 import android.os.Build
 import android.os.Bundle
+import android.os.Environment
 import android.provider.Settings
 import android.view.Gravity
 import android.view.LayoutInflater
@@ -27,11 +28,13 @@ import com.develop.base.ext.dimenRes
 import com.develop.base.ext.getSN
 import com.develop.base.ext.isBrand036I
 import com.develop.base.ext.isBrand054A
+import com.develop.base.ext.isBrand062
 import com.develop.base.ext.isNightTheme
 import com.develop.base.ext.setVisible
 import com.develop.base.ext.updateText
 import com.develop.base.util.GlobalToast
 import com.develop.base.widgets.CommonPopupWindow
+import com.develop.common.data_repo.FoodDataProvider
 import com.develop.common.dialog.CancelConfirmDialog
 import com.develop.common.dialog.CommonDialog
 import com.develop.common.dialog.PwdDialog
@@ -40,6 +43,7 @@ import com.develop.common.food_sdk.GlobalDevEvent
 import com.develop.common.router.Screens
 import com.develop.common.ui.CommonBVMActivity
 import com.develop.common.utils.AppVersionUtil
+import com.develop.common.utils.StringUtils
 import com.develop.common.utils.UpdateUtil
 import com.develop.common.widget.PwdLayout
 import com.develop.setting.databinding.ActivityAboutBinding
@@ -47,6 +51,7 @@ import com.develop.setting.ui.viewmodel.AboutViewModel
 import com.kuyuntech.cofarcooking.device.sdk.constant.core.DevStatus
 import com.kuyuntech.cofarcooking.device.sdk.eventbus.event.DevStatusEvent
 import com.kuyuntech.cofarcooking.device.sdk.util.core.CofarSDK
+import com.tuya.smartai.iot_sdk.Log
 import org.greenrobot.eventbus.Subscribe
 import java.io.*
 
@@ -260,6 +265,12 @@ class AboutActivity : CommonBVMActivity<ActivityAboutBinding, AboutViewModel>()
         binding.icUpdate.layoutParams = ivUpdateParam
         binding.tvTitle.updateText(getString(com.develop.common.R.string.About))
         binding.ivClose.setOnClickListener {
+
+            var file = File(Environment.getExternalStorageDirectory(),"success.lock")
+
+            var ms = StringUtils.getFileMD5(file.absolutePath)
+
+            Log.e("TAG md5", "file:$ms")
             finish()
         }
 
@@ -430,7 +441,7 @@ class AboutActivity : CommonBVMActivity<ActivityAboutBinding, AboutViewModel>()
             }
         }
 
-        binding.tvAppName.text = "FoodCooking_Android"
+        binding.tvAppName.text = if (isBrand062())"NoteCook" else "FoodCooking_Android"
         var appName = AppUtils.getAppVersionName()
         var (mode, code, version) = appName.split(".")
 //        var appCodeName = code+mode + "_V"+ getAppCode()+"_"+version

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

@@ -163,7 +163,7 @@ class WifiListActivity : CommonBindingActivity<ActivityWifiListBinding>(),
                         override fun onContentClick(wifiData: WifiData) {
                             val clickModel = wifiData
                             if (clickModel.isConnected) {
-                                GlobalToast.showToast("connected successfully")
+                                GlobalToast.showToast(context.getString(com.develop.common.R.string.connected_successfully))
                             } else if (clickModel.password.isNotEmpty()) {
                                 showPlainDialog()
                                 wifiHelp.connectNew(clickModel, clickModel.password)

+ 10 - 2
BusinessStep/src/main/java/com/develop/step/ui/cook_step/CookStepActivity.kt

@@ -692,6 +692,7 @@ class CookStepActivity : CookStepBaseActivity() {
             isClickType = 1
 
 
+
             //判断是否是空炸错误,由于汤锅错误SDK 已经做了 ;
             if (ConfigUtils.getBooleanErrCode(CofarSDK.devInfo().errCode.toInt()) && CofarSDK.devInfo().devMode == DevModes.AIR_FRYER) {
                 showErrCodeDialog(CofarSDK.devInfo().errCode.toInt())
@@ -1288,8 +1289,15 @@ class CookStepActivity : CookStepBaseActivity() {
                                 }
 
                                 DevStatus.STOP.toInt() -> {
-                                    viewModel.stepUiData.doingModify = false
-                                    clickFirstButton(BUTTON_TAG_START)
+                                    //判断是否警告或者详情描述,点击旋钮补显示弹窗
+                                    if (viewModel.displayStep()?.isDescription() == true ||viewModel.displayStep()?.isWarning() == true){
+                                        //下一步
+                                        clickPrevStep()
+                                    }else{
+                                        viewModel.stepUiData.doingModify = false
+                                        clickFirstButton(BUTTON_TAG_START)
+                                    }
+
                                     Log.d("QQQQ", "click start")
                                 }
 

+ 1 - 1
BusinessStep/src/main/java/com/develop/step/ui/cook_step/model/CookStepStatus.kt

@@ -23,7 +23,7 @@ class CookStepStatus(
         return  workMode == "DESCRIPTION" || workMode =="AF_DESCRIPTION"
     }
     fun  isWarning():Boolean{
-        return  workMode == "WARNING"
+        return  workMode == "WARNING" || workMode == "AF_WARNING"
     }
 
     fun isManualStep(): Boolean {

+ 6 - 1
BusinessStep/src/main/res/layout/activity_cook_detail.xml

@@ -76,7 +76,7 @@
         app:layout_constraintStart_toStartOf="@+id/iv_top_banner"
         app:layout_constraintTop_toTopOf="parent" />
 
-    <TextView
+    <com.develop.common.widget.MarqueeTextView
         android:id="@+id/tv_food_name"
         android:layout_width="0dp"
         android:layout_height="wrap_content"
@@ -86,6 +86,11 @@
         android:textColor="@color/cook_detail_info"
         android:textSize="@dimen/convert_48px"
         android:textStyle="bold"
+        android:ellipsize="marquee"
+        android:focusable="true"
+        android:focusableInTouchMode="true"
+        android:marqueeRepeatLimit="marquee_forever"
+        android:singleLine="true"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="@+id/iv_top_banner"
         app:layout_constraintTop_toBottomOf="@+id/start_layout"

+ 7 - 4
BusinessStep/src/main/res/layout/activity_cook_step_base.xml

@@ -25,18 +25,21 @@
             app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintStart_toStartOf="parent" />
 
-        <TextView
+        <com.develop.common.widget.MarqueeTextView
             android:id="@+id/tv_title_step"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:layout_marginStart="@dimen/convert_190px"
-            android:layout_marginEnd="@dimen/convert_50px"
-            android:ellipsize="end"
+            android:layout_marginEnd="@dimen/convert_70px"
             android:gravity="center"
-            android:maxLines="1"
             android:text="Step1:Peel 3 onions(180g)and2..."
             android:textColor="#ffffff"
             android:textSize="@dimen/convert_30px"
+            android:ellipsize="marquee"
+            android:focusable="true"
+            android:focusableInTouchMode="true"
+            android:marqueeRepeatLimit="marquee_forever"
+            android:singleLine="true"
 
             app:layout_constraintEnd_toStartOf="@+id/view_alarm"
             app:layout_constraintStart_toStartOf="parent" />

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

@@ -6,21 +6,26 @@ import android.content.Intent
 import android.content.res.Configuration
 import android.net.Uri
 import android.os.Build
+import android.os.Environment
 import android.os.PowerManager
 import android.provider.Settings
 import android.util.Log
 import com.blankj.utilcode.util.AppUtils
+import com.blankj.utilcode.util.FileUtils
 import com.blankj.utilcode.util.PathUtils
 import com.blankj.utilcode.util.ResourceUtils
 import com.blankj.utilcode.util.Utils
 import com.develop.base.app.BaseApp
 import com.develop.base.ext.getBrandNum
+import com.develop.base.ext.getOtaFileMd5
+import com.develop.base.ext.getSN
 import com.develop.base.ext.setAppCode
 import com.develop.base.ext.setIsBrand011A
 import com.develop.base.ext.setIsBrand036I
 import com.develop.base.ext.setIsBrand054A
 import com.develop.base.ext.setIsBrand062
 import com.develop.base.ext.setNightTheme
+import com.develop.base.ext.setOtaFileMd5
 import com.develop.base.util.MMkvUtils
 import com.develop.common.bean.TuyaEvent
 import com.develop.common.data_repo.FoodDataProvider
@@ -30,6 +35,7 @@ import com.develop.common.data_repo.net.interceptor.FoodRequestInterceptor
 import com.develop.common.food_sdk.GlobalDevEvent
 import com.develop.common.food_sdk.SerialPortUtils
 import com.develop.common.tag.MODEL
+import com.develop.common.utils.StringUtils
 import com.develop.common.utils.TuyaUtils
 import com.develop.common.utils.compat.RecyclerViewCompat
 import com.develop.common.utils.compat.ShapeableImageViewCompat
@@ -163,7 +169,23 @@ class FoodCookingApp : BaseApp() {
             )
         }.start()
 
-
+        var md5 = getOtaFileMd5()
+        var sn  = getSN()
+        //处理ota食谱更新问题
+//        if (sn.startsWith("010")&& getOtaFileMd5().isNotEmpty()
+//            && md5 != StringUtils.getFileMD5("system/media/cofa_cooking.zip")){
+//             //先删除sd卡目录下的cofa文件
+//            FileUtils.delete(File(Environment.getExternalStorageDirectory(),"cofa_cooking"))
+//
+//            FoodDataProvider.prepareData(this)
+//        }else{
+//            FoodDataProvider.prepareData(this)
+//        }
+//        //010 每一次都把md5的值set进去
+//        if (sn.startsWith("010")){
+//            setOtaFileMd5(StringUtils.getFileMD5("system/media/cofa_cooking.zip"))
+//
+//        }
     }
 
 
@@ -225,6 +247,7 @@ class FoodCookingApp : BaseApp() {
 
     override fun attachBaseContext(base: Context?) {
         super.attachBaseContext(base)
+        //把这个方法放到onCreate 处理ota问题
         FoodDataProvider.prepareData(this)
     }
 

+ 10 - 2
libBase/src/main/java/com/develop/base/ext/GlobaExt.kt

@@ -210,8 +210,8 @@ fun getSN(): String {
 //     return "002A30150020123010190001"
 //     return "000A10390020123010190001"
 //        return "000A50670020123010190005"
-//    return "010D10390020123010190001"
-        return "010F10390020123010190001"
+    return "010D10390020123010190001"
+//        return "010F10390020123010190001"
 
 //        return "011A10390020123010190001"
 //        return "000A50370020123010190004"
@@ -377,6 +377,14 @@ fun setIsBrand062(is054A: Boolean) {
     MMkvUtils.save("is062", is054A)
 }
 
+fun setOtaFileMd5(code: String) {
+    MMkvUtils.save("appCode", code)
+}
+
+fun getOtaFileMd5(): String {
+    return MMkvUtils.getString("appCode") ?: "1.01"
+}
+
 fun isBrand062(): Boolean {
     return MMkvUtils.getBool("is062", false)
 }