From be23995d10a817574476030b6df1f044f9b86a2c Mon Sep 17 00:00:00 2001 From: chenfufeng Date: Fri, 7 Feb 2025 16:49:49 +0800 Subject: [PATCH] =?UTF-8?q?[6.10.0][Feat]=E7=8A=B6=E6=80=81=E6=A0=8F?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=AB=98=E7=B2=BE=E5=9C=B0=E5=9B=BE=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E7=BC=93=E5=AD=98=E8=BF=9B=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../function/hmi/ui/widget/MapDownloadView.kt | 78 ++++++++++++++++++ .../hmi/ui/widget/RoundProgressBar.kt | 18 ++++ .../res/drawable-xhdpi/map_download_bg.png | Bin 0 -> 781 bytes .../drawable-xhdpi/map_download_failed.png | Bin 0 -> 1460 bytes .../drawable-xhdpi/map_download_success.png | Bin 0 -> 1415 bytes .../res/drawable/pb_vertical_drawable.xml | 23 ++++++ .../res/layout/view_map_download_progress.xml | 29 +++++++ .../src/main/res/layout/view_status_bar.xml | 8 ++ .../api/map/deva/IMoGoMapDevaProvider.kt | 7 +- .../call/map/CallerMapDevaListenerManager.kt | 10 +++ .../main/java/com/mogo/map/MapDataWrapper.kt | 18 ++++ 11 files changed, 190 insertions(+), 1 deletion(-) create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/MapDownloadView.kt create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/RoundProgressBar.kt create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/map_download_bg.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/map_download_failed.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/map_download_success.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable/pb_vertical_drawable.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_map_download_progress.xml diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/MapDownloadView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/MapDownloadView.kt new file mode 100644 index 0000000000..08e8564385 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/MapDownloadView.kt @@ -0,0 +1,78 @@ +package com.mogo.eagle.core.function.hmi.ui.widget + +import android.content.Context +import android.os.Looper +import android.util.AttributeSet +import android.view.LayoutInflater +import android.view.View +import androidx.constraintlayout.widget.ConstraintLayout +import com.mogo.eagle.core.function.api.map.deva.IMoGoMapDevaProvider +import com.mogo.eagle.core.function.call.map.CallerMapDevaListenerManager +import com.mogo.eagle.core.function.hmi.R +import com.mogo.eagle.core.utilcode.util.ThreadUtils +import com.mogo.eagle.core.utilcode.util.UiThreadHandler +import kotlinx.android.synthetic.main.view_map_download_progress.view.download_pb +import kotlinx.android.synthetic.main.view_map_download_progress.view.ivBackground + +class MapDownloadView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : ConstraintLayout(context, attrs, defStyleAttr), IMoGoMapDevaProvider { + + companion object { + private const val TAG = "MapDownloadView" + } + + init { + LayoutInflater.from(context).inflate(R.layout.view_map_download_progress, this) + } + + fun setProgress(pg: Int) { + download_pb.progress = pg + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + CallerMapDevaListenerManager.addListener("${TAG}${this.hashCode()}", this) + } + + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + CallerMapDevaListenerManager.removeListener("${TAG}${this.hashCode()}") + } + + private fun updateMapStatus(type: Int, progress: Int) { + when (type) { + -1 -> {// 下载失败 + visibility = View.VISIBLE + download_pb.visibility = View.GONE + ivBackground.setBackgroundResource(R.drawable.map_download_failed) + } + 0 -> {// 下载成功 + visibility = View.VISIBLE + download_pb.visibility = View.GONE + ivBackground.setBackgroundResource(R.drawable.map_download_success) + ThreadUtils.runOnUiThreadDelayed({ + visibility = View.GONE + }, 3000) + } + else -> {// 下载中 + visibility = View.VISIBLE + download_pb.visibility = View.VISIBLE + ivBackground.setBackgroundResource(R.drawable.map_download_bg) + download_pb.progress = progress + } + } + } + + override fun downloadStatus(type: Int, progress: Int) { + if (Thread.currentThread() != Looper.getMainLooper().thread) { + UiThreadHandler.post { + updateMapStatus(type, progress) + } + } else { + updateMapStatus(type, progress) + } + } +} \ 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/RoundProgressBar.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/RoundProgressBar.kt new file mode 100644 index 0000000000..532b224c17 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/RoundProgressBar.kt @@ -0,0 +1,18 @@ +package com.mogo.eagle.core.function.hmi.ui.widget + +import android.content.Context +import android.util.AttributeSet +import android.widget.ProgressBar +import com.mogo.eagle.core.widget.media.video.TextureVideoViewOutlineProvider +import me.jessyan.autosize.utils.AutoSizeUtils + +class RoundProgressBar @JvmOverloads constructor( + context: Context, attrs: AttributeSet? = null +) : ProgressBar(context, attrs) { + + override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) { + super.onSizeChanged(w, h, oldw, oldh) + outlineProvider = TextureVideoViewOutlineProvider(AutoSizeUtils.dp2px(context, 1f).toFloat()) + clipToOutline = true + } +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/map_download_bg.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/map_download_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..a72e4bffdb2c69205978787461a4bb60f7606a1e GIT binary patch literal 781 zcmeAS@N?(olHy`uVBq!ia0vp^W+2SL1|)l2v+e>Z#^NA%Cx&(BWL^R}E~ycoX}-P; zT0k}j17mw80}DtA5K93u0|WB{Mh0de%?J`(zyy~yTfmH9gA{&t)?32Bz*O$(;uw;_ z`gW#$hKQp`d%o`?H{l7{EiBy%Sre5eoYHIcb=eWrEpX6@qmhG=`)%^2R+EdzytZr* zTr_oVuLQ5)K`%jPkDxXYrA`Uk{p#;FzIi+U=I!!gh4%-Kzk9Q%^8MNTHru>yL59Yx zK8(Q!L<~UGgZ<$P;?~Evuzz4JOJtwt#JlShm%t7-g`1)^#~miEJJhYf!MDRo+HjSH z{~=$Aa}qn8?>jfj+?K3cTOR0RZqvNu?Z*U3x6g|n8?*H%%6HvRJf~eC+4tnB<`w?~ zyCwv3}uPebI}$EatXFe=xHx?X0!RG+jKHz&g7`M(o;pS_hl zo1mv%CgE)%oSkiI{zG~@Tai|oqjpA?%%mKrJ8_>MuzgYG?Xli|F`sA7q{!S^Za-`@88$rU|*ZO*Y5N`XtKt6 z-rhrrOnudwe%hR@{Rfm>w!cch#a$4m?eG5BK=9|AB~?FeUgV4{g2g>32^5L`V6JMc VXf)wp{sfd1Jzf1=);T3K0RUY&KL!8* literal 0 HcmV?d00001 diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/map_download_failed.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/map_download_failed.png new file mode 100644 index 0000000000000000000000000000000000000000..836c37e05b37196cb988ce5332bbfca4621ffa6d GIT binary patch literal 1460 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 V5d{j9tw{g?002ovPDHLkV1l)4f)xM& literal 0 HcmV?d00001 diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/pb_vertical_drawable.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/pb_vertical_drawable.xml new file mode 100644 index 0000000000..f36fa53a81 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/pb_vertical_drawable.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_map_download_progress.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_map_download_progress.xml new file mode 100644 index 0000000000..2ad3965732 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_map_download_progress.xml @@ -0,0 +1,29 @@ + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_status_bar.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_status_bar.xml index 134b9386c0..52299c8516 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_status_bar.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_status_bar.xml @@ -83,6 +83,14 @@ android:background="@drawable/icon_status_route_download_complete" android:layout_gravity="center_vertical"/> + + () { ConcurrentHashMap() private var filePath: String? = null + private var type: Int = -2 + private var progress: Int = 0 override fun doSomeAfterAddListener(tag: String, listener: IMoGoMapDevaProvider) { filePath?.let { listener.uploadFile(it) } + listener.downloadStatus(type, progress) } fun invokeUploadLogFile(filePath: String) { @@ -26,4 +29,11 @@ object CallerMapDevaListenerManager : CallerBase() { } } + fun invokeDownloadStatus(type: Int, progress: Int) { + this.type = type + this.progress = progress + M_LISTENERS.forEach { + it.value.downloadStatus(type, progress) + } + } } \ No newline at end of file diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/MapDataWrapper.kt b/libraries/mogo-map/src/main/java/com/mogo/map/MapDataWrapper.kt index 07d741ec3e..329c89bdff 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/MapDataWrapper.kt +++ b/libraries/mogo-map/src/main/java/com/mogo/map/MapDataWrapper.kt @@ -2,6 +2,7 @@ package com.mogo.map import android.os.Looper import com.mogo.eagle.core.data.map.MogoLocation +import com.mogo.eagle.core.function.call.map.CallerMapDevaListenerManager import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.i import com.mogo.eagle.core.utilcode.mogo.logger.Logger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_MAP @@ -198,14 +199,23 @@ object MapDataWrapper : IMogoData { MapDataApi.cacheHDDataByCity(id, object : OnHdDataDownByCityListener { override fun onMapHDDataCacheProgressByCity(id: Int, p: Double) { progress.invoke(id, p * 100) + if ((p*100).toInt() == 100) { + CallerMapDevaListenerManager.invokeDownloadStatus(0, 100) + } else { + CallerMapDevaListenerManager.invokeDownloadStatus(1, (p*100).toInt()) + } } override fun onMapHDDataCacheStateByCity(id: Int, state: Int) { result.invoke(id, state) + if (state==0) { + CallerMapDevaListenerManager.invokeDownloadStatus(-1, 0) + } } }) }else{ result.invoke(0, 0) + CallerMapDevaListenerManager.invokeDownloadStatus(-1, 0) } } @@ -225,10 +235,18 @@ object MapDataWrapper : IMogoData { object : OnHdDataDownByCityListener { override fun onMapHDDataCacheProgressByCity(id: Int, p: Double) { progress.invoke(id, p * 100) + if ((p*100).toInt() == 100) { + CallerMapDevaListenerManager.invokeDownloadStatus(0, 100) + } else { + CallerMapDevaListenerManager.invokeDownloadStatus(1, (p*100).toInt()) + } } override fun onMapHDDataCacheStateByCity(id: Int, state: Int) { result.invoke(id, state) + if (state==0) { + CallerMapDevaListenerManager.invokeDownloadStatus(-1, 0) + } } })