From 03e32bf71f5db9b4a109b8494a97118aebf69982 Mon Sep 17 00:00:00 2001 From: xuxinchao <13522809046@163.com> Date: Tue, 18 Jan 2022 20:12:33 +0800 Subject: [PATCH] Ad upgrade --- .../core/function/hmi/ui/MoGoHmiFragment.kt | 44 ++++ .../hmi/ui/widget/CircularProgressView.kt | 191 ++++++++++++++++++ .../hmi/ui/widget/SystemVersionView.kt | 114 ++++++++++- .../res/drawable-xxhdpi/icon_downloading.png | Bin 0 -> 6719 bytes .../drawable-xxhdpi/icon_upgrade_failed.png | Bin 0 -> 11077 bytes .../res/drawable-xxhdpi/icon_upgradeable.png | Bin 0 -> 7473 bytes .../res/drawable-xxhdpi/icon_upgrading.png | Bin 0 -> 7445 bytes .../main/res/layout/view_auto_pilot_check.xml | 1 + .../main/res/layout/view_system_version.xml | 15 ++ .../src/main/res/values/attr.xml | 11 + .../api/hmi/warning/IMoGoWaringProvider.kt | 14 ++ .../function/call/hmi/CallerHmiManager.kt | 20 ++ .../module/adas/OnAdasListenerAdapter.java | 24 ++- 13 files changed, 430 insertions(+), 4 deletions(-) create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/CircularProgressView.kt create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_downloading.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_upgrade_failed.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_upgradeable.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_upgrading.png diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt index ea42adc372..658e7f23a9 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt @@ -652,6 +652,50 @@ class MoGoHmiFragment : MvpFragment } + /** + * 展示工控机下载状态信息 + * @param downloadVersion 下载版本 + * @param downloadStatus 下载状态(0:下载完成;1:正在下载;2:下载失败) + * @param downloadProgress 下载进度 + */ + override fun showAdDownloadStatus( + downloadVersion: String, + downloadStatus: Int, + downloadProgress: Int + ) { +// if (downloadProgress>0){ +// //新版工控机包处于下载中或已下载完成状态,展示工具箱提示角标 +// viewUpgradeTips.visibility = View.VISIBLE +// } + if(downloadStatus==0){ + //新版本工控机包下载完成,处于可升级状态,展示工具箱提示角标 + viewUpgradeTips.visibility = View.VISIBLE + }else if(downloadStatus==1){ + //新版本工控机包正在下载中,展示工具箱提示角标 + viewUpgradeTips.visibility = View.VISIBLE + }else if(downloadStatus==2){ + //新版本工控机包下载失败,隐藏工具箱提交角标 + viewUpgradeTips.visibility = View.GONE + } + + } + + /** + * 展示工控机升级状态信息 + * @param upgradeStatus 升级状态(true代表升级成功、false代表升级不成功) + */ + override fun showAdUpgradeStatus(upgradeStatus: Boolean) { + if(upgradeStatus){ + //工控机升级成功,隐藏工具箱提示角标 + viewUpgradeTips.visibility = View.GONE + }else{ + //工控机升级失败,展示工具箱提示角标 + viewUpgradeTips.visibility = View.VISIBLE + } + //TODO 给工具箱空间传递状态 +// toolsView?.setStatus(true) + } + override fun onDestroy() { super.onDestroy() Log.d(TAG, "onDestroy") diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/CircularProgressView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/CircularProgressView.kt new file mode 100644 index 0000000000..66be06132d --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/CircularProgressView.kt @@ -0,0 +1,191 @@ +package com.mogo.eagle.core.function.hmi.ui.widget + +import android.animation.ValueAnimator +import android.content.Context +import android.content.res.TypedArray +import android.graphics.* +import android.util.AttributeSet +import android.view.View +import android.view.animation.OvershootInterpolator +import androidx.core.content.ContextCompat +import com.mogo.eagle.core.function.hmi.R + +/** + * @author XuXinChao + * @description 自定义圆形进度条 + * @since: 2022/1/14 + */ +class CircularProgressView @JvmOverloads constructor( + context: Context, attrs: AttributeSet?, defStyleAttr : Int) + : View(context, attrs, defStyleAttr){ + + val typedArray : TypedArray = context.obtainStyledAttributes(attrs, R.styleable.CircularProgressView) + // 绘制画笔 + private val mBackPaint : Paint = Paint() + private val mProgPaint : Paint = Paint() + // 绘制区域 + private var mRectF : RectF? = null + // 圆环渐变色 + private var mColorArray : IntArray?=null + // 圆环进度(0-100) 初始化进度 + private var mProgress : Int = typedArray.getInteger(R.styleable.CircularProgressView_progress, 0) + + constructor(context : Context) : this(context,null) + + constructor(context : Context,attrs : AttributeSet?) :this(context, attrs, 0) + + init { + // 初始化背景圆环画笔 + mBackPaint.style = Paint.Style.STROKE // 只描边,不填充 + mBackPaint.strokeCap = Paint.Cap.ROUND // 设置圆角 + mBackPaint.isAntiAlias = true // 设置抗锯齿 + mBackPaint.isDither = true // 设置抖动 + mBackPaint.strokeWidth = typedArray.getDimension(R.styleable.CircularProgressView_backWidth, 5.0f) + mBackPaint.color = typedArray.getColor(R.styleable.CircularProgressView_backColor, Color.LTGRAY) + // 初始化进度圆环画笔 + mProgPaint.style = Paint.Style.STROKE // 只描边,不填充 + mProgPaint.strokeCap = Paint.Cap.ROUND // 设置圆角 + mProgPaint.isAntiAlias = true // 设置抗锯齿 + mProgPaint.isDither = true // 设置抖动 + mProgPaint.strokeWidth = typedArray.getDimension(R.styleable.CircularProgressView_progWidth, 10.0f) + mProgPaint.color = typedArray.getColor(R.styleable.CircularProgressView_progColor, Color.BLUE) + // 初始化进度圆环渐变色 + val startColor = typedArray.getColor(R.styleable.CircularProgressView_progStartColor, -1) + val firstColor = typedArray.getColor(R.styleable.CircularProgressView_progFirstColor, -1) + if(startColor != -1 && firstColor != -1){ + mColorArray = intArrayOf(startColor,firstColor) + }else{ + mColorArray = null + } + + + typedArray.recycle(); + } + + override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec) + val viewWide = getMeasuredWidth() - getPaddingLeft() - getPaddingRight(); + val viewHigh = getMeasuredHeight() - getPaddingTop() - getPaddingBottom(); + val mRectLength = + ((if (viewWide > viewHigh) viewHigh else viewWide) - if (mBackPaint.strokeWidth > mProgPaint.strokeWidth) mBackPaint.strokeWidth else mProgPaint.strokeWidth).toInt() + val mRectL = getPaddingLeft() + (viewWide - mRectLength) / 2 + val mRectT = getPaddingTop() + (viewHigh - mRectLength) / 2 + mRectF = RectF(mRectL.toFloat(), mRectT.toFloat(), (mRectL + mRectLength).toFloat(), + (mRectT + mRectLength).toFloat()) + // 设置进度圆环渐变色 + mColorArray?.let { + mProgPaint.shader = LinearGradient( + 0.0f, 0.0f, 0.0f, + measuredWidth.toFloat(), it, null, Shader.TileMode.MIRROR) + } + + } + + override fun onDraw(canvas: Canvas?) { + super.onDraw(canvas) + canvas?.let { + mRectF?.let { it1 -> it.drawArc(it1, 0.0f, 360.0f, false, mBackPaint) } + mRectF?.let { it1 -> it.drawArc(it1, 275.0f, + (360 * mProgress / 100).toFloat(), false, mProgPaint) } + } + + } + + /** + * 获取当前进度 + * @return 当前进度(0-100) + */ + fun getProgress() : Int{ + return mProgress + } + + /** + * 设置当前进度 + * @param progress 当前进度(0-100) + */ + fun setProgress(progress : Int){ + mProgress = progress + invalidate() + } + + /** + * 设置当前进度,并展示进度动画。如果动画时间小于等于0,则不展示动画 + * @param progress 当前进度(0-100) + * @param animTime 动画时间(毫秒) + */ + fun setProgress(progress : Int, animTime : Long){ + if (animTime<=0){ + setProgress(progress) + } else{ + val animator = ValueAnimator.ofInt(mProgress, progress) + animator.addUpdateListener{ + mProgress = it.animatedValue as Int + invalidate() + } + animator.interpolator = OvershootInterpolator() + animator.duration = animTime + animator.start() + } + } + + /** + * 设置背景圆环宽度 + * @param width 背景圆环宽度 + */ + fun setBackWidth(width : Int){ + mBackPaint.strokeWidth = width.toFloat() + invalidate() + } + + /** + * 设置背景圆环颜色 + * @param color 背景圆环颜色 + */ + fun setBackColor(color : Int){ + mBackPaint.color = ContextCompat.getColor(context,color) + invalidate() + } + + /** + * 设置进度圆环宽度 + * @param width 进度圆环宽度 + */ + fun setProgWidth(width : Int){ + mProgPaint.strokeWidth = width.toFloat() + invalidate() + } + + /** + * 设置进度圆环颜色 + * @param color 景圆环颜色 + */ + fun setProgColor(color : Int){ + mProgPaint.color = ContextCompat.getColor(context,color) + mProgPaint.shader = null + invalidate() + } + + fun setProgColor(startColor : Int,endColor: Int){ + mColorArray = intArrayOf(ContextCompat.getColor(context,startColor),ContextCompat.getColor(context,endColor)) + mColorArray?.let { + mProgPaint.shader = LinearGradient(0f, 0f, 0f, + getMeasuredWidth().toFloat(), it, null, Shader.TileMode.MIRROR) + } + + } + + fun setProgColor(colorArray : IntArray){ + colorArray.let { + if(it.size<2){ + return + } + mColorArray = it.copyOf() + mColorArray?.let{ + mProgPaint.shader = LinearGradient(0f, 0f, 0f, + getMeasuredWidth().toFloat(), it, null, Shader.TileMode.MIRROR) + } + } + + } + +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SystemVersionView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SystemVersionView.kt index 69f5f076af..58e9a52bc1 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SystemVersionView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SystemVersionView.kt @@ -3,6 +3,7 @@ package com.mogo.eagle.core.function.hmi.ui.widget import android.content.Context import android.util.AttributeSet import android.view.LayoutInflater +import android.view.View import androidx.constraintlayout.widget.ConstraintLayout import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener @@ -10,6 +11,8 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListener import com.mogo.eagle.core.function.hmi.R import com.mogo.eagle.core.function.hmi.ui.tools.AdUpgradeDialog import com.mogo.eagle.core.utilcode.mogo.logger.Logger +import com.mogo.eagle.core.utilcode.util.AppUtils +import com.mogo.eagle.core.utilcode.util.ToastUtils import kotlinx.android.synthetic.main.view_system_version.view.* /** @@ -25,10 +28,18 @@ class SystemVersionView @JvmOverloads constructor( companion object { const val TAG = "SystemVersionView" + + const val AD_LATEST_VERSION = 1 //AD最新版 + const val AD_DOWNING = 2 //AD下载中 + const val AD_DOWNLOAD_FAIL = 3 //AD下载失败 + const val AD_UPGRADEABLE = 4 //AD下载成功,可升级状态 + const val AD_UPGRADING = 5 //AD升级中 + const val AD_UPGRADE_FAIL = 6 //AD升级失败 } private var connectStatus = false private var adUpgradeDialog : AdUpgradeDialog? = null + private var adStatus = AD_LATEST_VERSION //工控机默认为最新版 init { LayoutInflater.from(context).inflate(R.layout.view_system_version, this, true) @@ -36,6 +47,9 @@ class SystemVersionView @JvmOverloads constructor( } private fun initView(){ + showCurrentPadVersion() + showCurrentAdVersion() + //鹰眼版本视图点击事件 ivPadVersion.setOnClickListener { Logger.i(TAG,"pad version view clicked") @@ -43,10 +57,104 @@ class SystemVersionView @JvmOverloads constructor( //工控机版本视图点击事件 ivAdVersion.setOnClickListener { Logger.i(TAG,"ad version view clicked") - if(adUpgradeDialog == null){ - adUpgradeDialog = AdUpgradeDialog(context) + when(adStatus){ + AD_LATEST_VERSION -> { + //最新版 + + } + AD_DOWNING -> { + //下载中 + //TODO 需要向工控机要下载时间 + ToastUtils.showShort("新版本下载中,预计XX分钟下载完成") + } + AD_DOWNLOAD_FAIL -> { + //下载失败 + + } + AD_UPGRADEABLE -> { + //下载成功,可升级,点击弹起升级确认弹窗 + if(adUpgradeDialog == null){ + adUpgradeDialog = AdUpgradeDialog(context) + } + adUpgradeDialog?.showUpgradeDialog() + } + AD_UPGRADING -> { + //升级中 + ToastUtils.showShort("新版本升级中,预计5分钟升级完成") + } + AD_UPGRADE_FAIL -> { + //升级失败 + ToastUtils.showShort("升级失败,请联系运维人员") + } + } - adUpgradeDialog?.showUpgradeDialog() + + } + + } + + /** + * 展示当前鹰眼版本 + */ + private fun showCurrentPadVersion(){ + tvPadVersionContent?.let { + it.text = AppUtils.getAppVersionName() + } + } + + /** + * 展示当前工控机版本 + */ + private fun showCurrentAdVersion(){ + tvAdVersionContent?.let { +// it.text = AdasManager.getInstance().getAdasConfig().getDockVersion()) + } + } + + /** + * 展示工控机下载状态信息 + * @param downloadVersion 下载版本 + * @param downloadStatus 下载状态(0:下载完成;1:正在下载;2:下载失败) + * @param downloadProgress 下载进度 + */ + fun showAdDownloadStatus(downloadVersion : String,downloadStatus : Int,downloadProgress : Int){ + if(downloadStatus==0){ + //下载完成,处于可升级状态,展示“可升级”角标,将AD背景变为蓝色,并隐藏下载进度条 + adStatus = AD_UPGRADEABLE + ivAdStatus?.setImageResource(R.drawable.icon_upgradeable) + ivAdVersion?.setBackgroundResource(R.drawable.version_upgradeable_background) + adCircularProgressView?.visibility = View.GONE + }else if(downloadStatus==1){ + //正在下载,展示“下载中”角标,展示进度条,并设置当前下载进度 + adStatus = AD_DOWNING + ivAdStatus?.setImageResource(R.drawable.icon_downloading) + adCircularProgressView?.let { + it.visibility = View.VISIBLE + it.setProgress(downloadProgress) + } + }else if(downloadStatus==2){ + //下载失败,目前暂时将状态设为“最新版”角标,并隐藏进度条 + adStatus = AD_DOWNLOAD_FAIL + ivAdStatus?.setImageResource(R.drawable.icon_latest_version) + adCircularProgressView?.visibility = View.GONE + } + + + } + + /** + * 展示工控机升级状态信息 + * @param upgradeStatus 升级状态(true代表升级成功、false代表升级不成功) + */ + fun showAdUpgradeStatus(upgradeStatus : Boolean){ + if(upgradeStatus){ + //AD升级成功,工控机图标展示最新版样式 + adStatus = AD_LATEST_VERSION + ivAdStatus?.setImageResource(R.drawable.icon_latest_version) + }else{ + //AD升级失败,工控机图标展示升级失败样式 + adStatus = AD_UPGRADE_FAIL + ivAdStatus?.setImageResource(R.drawable.icon_upgrade_failed) } } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_downloading.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_downloading.png new file mode 100644 index 0000000000000000000000000000000000000000..c43939ea59644819dd23da9d65547bf92fb1e4aa GIT binary patch literal 6719 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 Vi+gy+i#`AV002ovPDHLkV1nO`^*8_k literal 0 HcmV?d00001 diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_upgrade_failed.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_upgrade_failed.png new file mode 100644 index 0000000000000000000000000000000000000000..4e4966b6ce1b950242a68fe01f2ccbf5768972bd GIT binary patch literal 11077 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 LNkvXXu0mjf@!V9Q literal 0 HcmV?d00001 diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_upgradeable.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_upgradeable.png new file mode 100644 index 0000000000000000000000000000000000000000..8255b8d5649bab80976d4a893e75ef3c1abb7071 GIT binary patch literal 7473 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 + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoWaringProvider.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoWaringProvider.kt index 483f2954d6..92880a719c 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoWaringProvider.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoWaringProvider.kt @@ -159,4 +159,18 @@ interface IMoGoWaringProvider { */ fun showBrakeLight(brakeLight: Int) + /** + * 展示工控机下载状态信息 + * @param downloadVersion 下载版本 + * @param downloadStatus 下载状态(0:下载完成;1:正在下载;2:下载失败) + * @param downloadProgress 下载进度 + */ + fun showAdDownloadStatus(downloadVersion : String,downloadStatus : Int,downloadProgress : Int) + + /** + * 展示工控机升级状态信息 + * @param upgradeStatus 升级状态(true代表升级成功、false代表升级不成功) + */ + fun showAdUpgradeStatus(upgradeStatus : Boolean) + } \ No newline at end of file diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt index b10fbffcba..367b09c856 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt @@ -226,4 +226,24 @@ object CallerHmiManager : CallerBase() { fun hideToolsView() { waringProviderApi.hideToolsView() } + + /** + * 展示工控机下载状态信息 + * @param downloadVersion 下载版本 + * @param downloadStatus 下载状态(0:下载完成;1:正在下载;2:下载失败) + * @param downloadProgress 下载进度 + */ + fun showAdDownloadStatus(downloadVersion : String,downloadStatus : Int,downloadProgress : Int){ + waringProviderApi.showAdDownloadStatus(downloadVersion,downloadStatus,downloadProgress) + } + + /** + * 展示工控机升级状态信息 + * @param upgradeStatus 升级状态(true代表升级成功、false代表升级不成功) + */ + fun showAdUpgradeStatus(upgradeStatus : Boolean){ + waringProviderApi.showAdUpgradeStatus(upgradeStatus) + } + + } \ No newline at end of file diff --git a/modules/mogo-module-adas/src/main/java/com/mogo/module/adas/OnAdasListenerAdapter.java b/modules/mogo-module-adas/src/main/java/com/mogo/module/adas/OnAdasListenerAdapter.java index 9665f90b35..729d99df65 100644 --- a/modules/mogo-module-adas/src/main/java/com/mogo/module/adas/OnAdasListenerAdapter.java +++ b/modules/mogo-module-adas/src/main/java/com/mogo/module/adas/OnAdasListenerAdapter.java @@ -25,6 +25,7 @@ import com.zhidao.support.adas.high.bean.AutopilotWayArrive; import com.zhidao.support.adas.high.bean.CarLaneInfo; import com.zhidao.support.adas.high.bean.CarStateInfo; import com.zhidao.support.adas.high.bean.IPCPowerResultInfo; +import com.zhidao.support.adas.high.bean.IPCUpgradeInfo; import com.zhidao.support.adas.high.bean.IPCUpgradePatchDownloadStatusInfo; import com.zhidao.support.adas.high.bean.IPCUpgradeStateInfo; import com.zhidao.support.adas.high.bean.LightStatueInfo; @@ -214,7 +215,21 @@ public class OnAdasListenerAdapter implements OnAdasListener { */ @Override public void onUpgradeStateInfo(IPCUpgradeStateInfo info) { - + if(info!=null){ + Logger.d(TAG,"onUpgradeStateInfo : "+info.getUpgradeStatus()); + boolean upgradeStatus=false;//工控机升级状态,true代表升级成功 false代表升级失败,默认为false + if(info.getUpgradeStatus() == IPCUpgradeStateInfo.Status.SUCCESSFUL.code){ + upgradeStatus=true;//升级成功 + //升级结束确认 + AdasManager.getInstance().sendBaseInfo(IPCUpgradeInfo.upgradeFinishAffirm()); + }else if(info.getUpgradeStatus() == IPCUpgradeStateInfo.Status.FAILED.code){ + upgradeStatus=false;//升级失败 + } + Logger.d(TAG,"onUpgradeStateInfo : "+(upgradeStatus ? "升级成功" :"升级失败")); + CallerHmiManager.INSTANCE.showAdUpgradeStatus(upgradeStatus); + }else{ + Logger.d(TAG,"onUpgradeStateInfo : upgrade status info is null"); + } } /** @@ -223,6 +238,13 @@ public class OnAdasListenerAdapter implements OnAdasListener { */ @Override public void onUpgradePatchDownloadStatus(IPCUpgradePatchDownloadStatusInfo info) { + if(info!=null){ + Logger.d(TAG,"onUpgradePatchDownloadStatus : status="+info.getDownloadStatus() + + " version="+info.getDownloadVersion()+ " progress="+info.getDownloadProgress()); + CallerHmiManager.INSTANCE.showAdDownloadStatus(info.getDownloadVersion(),info.getDownloadStatus(),info.getDownloadProgress()); + }else{ + Logger.d(TAG,"onUpgradePatchDownloadStatus : download status info is null"); + } }