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 0000000000..a72e4bffdb
Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/map_download_bg.png differ
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 0000000000..836c37e05b
Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/map_download_failed.png differ
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/map_download_success.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/map_download_success.png
new file mode 100644
index 0000000000..4f0e9c4d3e
Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/map_download_success.png differ
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)
+ }
}
})