From: TrillGates Date: Fri, 29 Jan 2021 06:11:01 +0000 (+0800) Subject: fixed copy issues. X-Git-Url: http://git.snicker.com.cn/sitemap.xml?a=commitdiff_plain;h=1caa24d564c0649af4fef9178ccc1eb0dbf4894c;p=icfotaclient.git fixed copy issues. --- diff --git a/app/src/main/java/com/ic/icfotaclient/presenter/OtaViewModel.kt b/app/src/main/java/com/ic/icfotaclient/presenter/OtaViewModel.kt index e77de84..3352323 100644 --- a/app/src/main/java/com/ic/icfotaclient/presenter/OtaViewModel.kt +++ b/app/src/main/java/com/ic/icfotaclient/presenter/OtaViewModel.kt @@ -133,7 +133,7 @@ class OtaViewModel : ViewModel() { } } - val downInfoResult = MutableLiveData() + private val downInfoResult = MutableLiveData() /** @@ -222,6 +222,11 @@ class OtaViewModel : ViewModel() { } } + override fun onVerify() { + //校验中 + currentActionState.postValue(UpdateActionState.VERIFY) + } + override fun onDownloadSuccess() { Log.d(TAG, "onDownloadSuccess...") //下载完成了 diff --git a/app/src/main/java/com/ic/icfotaclient/repository/CarOtaRepository.kt b/app/src/main/java/com/ic/icfotaclient/repository/CarOtaRepository.kt index a63ecd3..801067b 100644 --- a/app/src/main/java/com/ic/icfotaclient/repository/CarOtaRepository.kt +++ b/app/src/main/java/com/ic/icfotaclient/repository/CarOtaRepository.kt @@ -8,6 +8,8 @@ import com.ic.icfotaclient.bean.DownloadInfo import com.ic.icfotaclient.bean.OtaInfo import com.ic.icfotaclient.presenter.OtaViewModel import com.ic.icfotaclient.utils.CarOtaApiUtils +import com.ic.icfotaclient.utils.MD5.checkMd5 +import com.ic.icfotaclient.utils.MD5.createMd5 import com.ic.icfotaclient.utils.VersionInfoUtils import com.ota.fw.IDownloadEvent import com.ota.fw.SysInfo @@ -25,7 +27,7 @@ class CarOtaRepository : AbstractOtaRepository() { private var mCallback: IOtaRepositoryCallback? = null - override suspend fun checkHasNewVersion(): OtaInfo? { + override fun checkHasNewVersion(): OtaInfo? { val systemInfo = SysInfo( BuildConfig.token, VersionInfoUtils.getIMEI(), @@ -55,7 +57,9 @@ class CarOtaRepository : AbstractOtaRepository() { override fun onDownloaded(extra: Bundle?) { Log.d(TAG, "onDownloaded...$extra") - mCallback?.onDownloadSuccess() + //mCallback?.onDownloadSuccess() + //下载完就校验的,内部校验 + mCallback?.onVerify() } override fun onError(errCode: Int, extra: Bundle?) { @@ -92,28 +96,38 @@ class CarOtaRepository : AbstractOtaRepository() { Log.d(OtaViewModel.TAG, "copy finished to target path == > $targetFile") val downloadInfo = DownloadInfo(download.file.path, 0L) downloadInfo.path = targetFile + //校验一下,如果一样,说明复制成功了否则就是错误了 + val createMd5 = createMd5(sourceFile.path) + val checkMd5 = checkMd5(createMd5, targetFile) + Log.d(TAG, "cp checkMd5 == > $checkMd5") + if (!checkMd5) { + mCallback?.onDownloadError(-5, "校验失败") + } else { + //处理完了,可以通知成功了 + mCallback?.onDownloadSuccess() + } return downloadInfo } - override suspend fun reportInstallResult(isSuccess: Boolean) { + override fun reportInstallResult(isSuccess: Boolean) { CarOtaApiUtils.mClient.reportUpdateResult(isSuccess, 0) Log.d(TAG, "report result == isSuccess == > $isSuccess") } - override suspend fun reportResult(versionCode: String) { + override fun reportResult(versionCode: String) { CarOtaApiUtils.mClient.reportUpdateResultByVersion(versionCode) Log.d(TAG, "report == versionCode == > $versionCode") } - override suspend fun getPackagePath(): String? { + override fun getPackagePath(): String? { return null } - override suspend fun deletePackage() { + override fun deletePackage() { //传说他们自己会删除的,通报了成功以后 } - override suspend fun pauseDownload() { + override fun pauseDownload() { Log.d(TAG, "pauseDownload...") CarOtaApiUtils.mClient.stopDownload() } diff --git a/app/src/main/java/com/ic/icfotaclient/repository/ICOtaRepository.kt b/app/src/main/java/com/ic/icfotaclient/repository/ICOtaRepository.kt index af4edbb..5a02dd1 100644 --- a/app/src/main/java/com/ic/icfotaclient/repository/ICOtaRepository.kt +++ b/app/src/main/java/com/ic/icfotaclient/repository/ICOtaRepository.kt @@ -38,7 +38,7 @@ class ICOtaRepository : AbstractOtaRepository() { } - override fun pauseDownload() { + override fun pauseDownload() { if (checkIcVersion != null) { Toast.makeText( App.sContext, diff --git a/app/src/main/java/com/ic/icfotaclient/repository/IOtaRepositoryCallback.kt b/app/src/main/java/com/ic/icfotaclient/repository/IOtaRepositoryCallback.kt index 0eab794..12eb63f 100644 --- a/app/src/main/java/com/ic/icfotaclient/repository/IOtaRepositoryCallback.kt +++ b/app/src/main/java/com/ic/icfotaclient/repository/IOtaRepositoryCallback.kt @@ -12,6 +12,13 @@ interface IOtaRepositoryCallback { */ fun onDownloadError(errorCode: Int, msg: String) + + /** + * 正在校验中 + */ + fun onVerify() + + /** * 下载成功 */ diff --git a/app/src/main/java/com/ic/icfotaclient/utils/ICOtaApiUtils.kt b/app/src/main/java/com/ic/icfotaclient/utils/ICOtaApiUtils.kt index 1e20ae3..ab031cf 100644 --- a/app/src/main/java/com/ic/icfotaclient/utils/ICOtaApiUtils.kt +++ b/app/src/main/java/com/ic/icfotaclient/utils/ICOtaApiUtils.kt @@ -168,7 +168,7 @@ object ICOtaApiUtils { val bis = BufferedInputStream(inputStream) val bos = BufferedOutputStream(outPutStream) val buf = ByteArray(1024) - var len = 0; + var len: Int var current = 0; while (true) { len = bis.read(buf) @@ -179,9 +179,16 @@ object ICOtaApiUtils { } inputStream?.close() outPutStream.close() + //校验文件下载是否正确 + callback?.onVerify() + val checkMd5 = MD5.checkMd5(otaInfo!!.md5sum, VersionInfoUtils.getFlashPath()) + Log.d(TAG, "checkMd5 =+++= > $checkMd5") + if (!checkMd5) { + callback?.onDownloadError(-5, "校验失败") + } + callback?.onDownloadSuccess() + return DownloadInfo(VersionInfoUtils.getFlashPath(), total.toLong()) } - callback?.onDownloadSuccess() - return DownloadInfo(VersionInfoUtils.getFlashPath(), total.toLong()) } catch (e: Exception) { e.printStackTrace() callback?.onDownloadError(0, App.sContext.getString(R.string.error_tips_text)) diff --git a/app/src/main/java/com/ic/icfotaclient/utils/MD5.java b/app/src/main/java/com/ic/icfotaclient/utils/MD5.java new file mode 100644 index 0000000..01d3c67 --- /dev/null +++ b/app/src/main/java/com/ic/icfotaclient/utils/MD5.java @@ -0,0 +1,47 @@ +package com.ic.icfotaclient.utils; + +import android.util.Log; + +import java.io.File; +import java.io.FileInputStream; +import java.math.BigInteger; +import java.security.MessageDigest; + +public class MD5 { + static String TAG = "MD5"; + + public static String createMd5(String str) { + MessageDigest mMDigest; + FileInputStream Input; + File file = new File(str); + byte[] buffer = new byte[1024]; + int len; + if (!file.exists()) + return null; + try { + mMDigest = MessageDigest.getInstance("MD5"); + Input = new FileInputStream(file); + while ((len = Input.read(buffer, 0, 1024)) != -1) { + mMDigest.update(buffer, 0, len); + } + Input.close(); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + BigInteger mBInteger = new BigInteger(1, mMDigest.digest()); + Log.v(TAG, "create_MD5=" + mBInteger.toString(16)); + return mBInteger.toString(16); + + } + + public static boolean checkMd5(String Md5, String file) { + if (Md5!=null) { + String str = createMd5(file); + Log.d(TAG, "web file MD5 = "+ Md5+", "+file+" md5sum = " + str); + return Md5.compareTo(str) == 0; + }else { + return true; + } + } +} diff --git a/app/src/main/java/com/ic/icfotaclient/utils/UpdateActionState.kt b/app/src/main/java/com/ic/icfotaclient/utils/UpdateActionState.kt index cafcb33..557f71e 100644 --- a/app/src/main/java/com/ic/icfotaclient/utils/UpdateActionState.kt +++ b/app/src/main/java/com/ic/icfotaclient/utils/UpdateActionState.kt @@ -7,6 +7,7 @@ enum class UpdateActionState { LAST_VERSION,/*显示:已是最新版本,isEnable = false*/ DOWNLOADING,/*显示暂停下载 isEnable = true*/ DOWNLOADED,/*显示:安装,isEnable = true*/ + VERIFY,/*显示:正在校验升级包,isEnable = false*/ DOWNLOAD_PAUSE,/*显示继续下载,isEnable=true*/ NO_NETWORK,/*显示无网络,isEnable=false*/ ERROR,/*恢复默认,显示检查更新 isEnable=false*/ diff --git a/app/src/main/java/com/ic/icfotaclient/utils/VersionInfoUtils.kt b/app/src/main/java/com/ic/icfotaclient/utils/VersionInfoUtils.kt index e7b21b4..1f07ae6 100644 --- a/app/src/main/java/com/ic/icfotaclient/utils/VersionInfoUtils.kt +++ b/app/src/main/java/com/ic/icfotaclient/utils/VersionInfoUtils.kt @@ -79,12 +79,11 @@ object VersionInfoUtils { } - var flash_root = - "/data" //Environment.getExternalStorageDirectory().getAbsolutePath(); + var flash_root = "/data" var DATA_ROOT = "/data/media/0" - private const val updateFileName = "update.zip" + private const val updateFileName = "update_pkg" fun getFlashPath(): String { diff --git a/app/src/main/java/com/ic/icfotaclient/view/SystemUpdateActivity.kt b/app/src/main/java/com/ic/icfotaclient/view/SystemUpdateActivity.kt index 4c8ea59..fc0e662 100644 --- a/app/src/main/java/com/ic/icfotaclient/view/SystemUpdateActivity.kt +++ b/app/src/main/java/com/ic/icfotaclient/view/SystemUpdateActivity.kt @@ -144,6 +144,10 @@ class SystemUpdateActivity : AppCompatActivity() { checkUpdate.text = getString(R.string.error_tips_text) checkUpdate.isEnabled = false } + UpdateActionState.VERIFY -> { + checkUpdate.text = getString(R.string.verify_package_text) + checkUpdate.isEnabled = false + } else -> { //NONE } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index c668824..b94e12d 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -80,6 +80,6 @@ android:padding="10dp" android:text="@string/check_has_update_text" android:textColor="@color/white" - android:textSize="24sp" /> + android:textSize="20sp" /> \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 598c92a..3d3f34f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -8,6 +8,7 @@ 无法触及到服务器 请确保电量50%以上 资源准备失败,请重启尝试 + 正在校验升级包 已经是最新版本 下载更新包 正在玩命下载中…