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) + } } })