From fc7732e8f57d48131e21f64c5ff428dd1f91803f Mon Sep 17 00:00:00 2001 From: chenfufeng Date: Fri, 10 Feb 2023 19:32:22 +0800 Subject: [PATCH] =?UTF-8?q?[Feat]=E6=96=B0=E5=A2=9E=E9=AB=98=E7=B2=BE?= =?UTF-8?q?=E5=9C=B0=E5=9B=BE=E7=BC=93=E5=AD=98=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../function/hmi/ui/map/OfflineMapDialog.kt | 170 ++++++++++++++++++ .../hmi/ui/tools/AutoPilotAndCheckView.kt | 4 + .../hmi/ui/widget/SystemVersionView.kt | 21 +++ .../res/drawable-xhdpi/download_fail_icon.png | Bin 0 -> 8253 bytes .../drawable-xhdpi/download_success_icon.png | Bin 0 -> 9547 bytes .../res/drawable-xhdpi/icon_be_updated.png | Bin 0 -> 7172 bytes .../main/res/drawable-xhdpi/icon_hd_map.png | Bin 0 -> 3196 bytes .../res/drawable/progressbar_corner_bg.xml | 43 +++++ .../main/res/layout/dialog_offline_map.xml | 135 ++++++++++++++ .../main/res/layout/view_system_version.xml | 24 ++- .../src/main/res/values/color.xml | 4 +- .../src/main/res/values/strings.xml | 7 + .../api/hmi/warning/IMoGoWaringProvider.kt | 20 +++ .../function/call/hmi/CallerHmiManager.kt | 3 + .../call/map/CallerMapUIServiceManager.kt | 12 +- gradle.properties | 2 +- .../com/mogo/map/hdcache/IHdCacheListener.kt | 5 + .../uicontroller/IMogoMapUIController.java | 10 ++ .../java/com/mogo/map/AMapViewWrapper.java | 51 ++++++ .../com/mogo/map/MogoMapUIController.java | 17 ++ .../map/uicontroller/AMapUIController.java | 16 ++ .../java/com/mogo/map/utils/HDMapUtils.kt | 27 +++ 22 files changed, 565 insertions(+), 6 deletions(-) create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/map/OfflineMapDialog.kt create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/download_fail_icon.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/download_success_icon.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_be_updated.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_hd_map.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable/progressbar_corner_bg.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/layout/dialog_offline_map.xml create mode 100644 core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoWaringProvider.kt create mode 100644 libraries/mogo-map-api/src/main/java/com/mogo/map/hdcache/IHdCacheListener.kt create mode 100644 libraries/mogo-map/src/main/java/com/mogo/map/utils/HDMapUtils.kt diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/map/OfflineMapDialog.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/map/OfflineMapDialog.kt new file mode 100644 index 0000000000..aa62c470b2 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/map/OfflineMapDialog.kt @@ -0,0 +1,170 @@ +package com.mogo.eagle.core.function.hmi.ui.map + +import android.annotation.SuppressLint +import android.content.Context +import android.view.View +import android.widget.ImageView +import android.widget.ProgressBar +import android.widget.TextView +import androidx.annotation.MainThread +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.core.content.ContextCompat +import androidx.core.content.res.ResourcesCompat +import androidx.core.view.marginTop +import com.mogo.eagle.core.function.call.hmi.CallerHmiManager +import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager +import com.mogo.eagle.core.function.hmi.R +import com.mogo.eagle.core.function.hmi.dialog.BaseFloatDialog +import com.mogo.map.hdcache.IHdCacheListener +import me.jessyan.autosize.utils.AutoSizeUtils + +/** + * 离线地图缓存 + */ +class OfflineMapDialog(context: Context): BaseFloatDialog(context) { + + private var roundRootLayout: ConstraintLayout? = null + private var offlineTitleView: TextView? = null + private var leftView: TextView? = null + private var rightView: TextView? = null + private var okView: TextView? = null + private var vertLineView: View? = null + private var horizontalLineView: View? = null + private var cacheTipView: TextView? = null + + private var progressBar: ProgressBar? = null + private var downloadPercentView: TextView? = null + private var downloadResultImg: ImageView? = null + + private var isLoading = false + private var isConfirm = true + private var isRetry = false + + init { + setContentView(R.layout.dialog_offline_map) + setCanceledOnTouchOutside(true) + + initView() + } + + private fun initView() { + roundRootLayout = findViewById(R.id.roundRootLayout) + offlineTitleView = findViewById(R.id.tv_cache_title) + progressBar = findViewById(R.id.progressBar) + downloadPercentView = findViewById(R.id.tvDownloadProgress) + leftView = findViewById(R.id.tv_cache_confirm) + rightView = findViewById(R.id.tv_cache_cancel) + okView = findViewById(R.id.tv_cache_ok) + vertLineView = findViewById(R.id.view_vertical_line) + horizontalLineView = findViewById(R.id.view_horizontal_line) + cacheTipView = findViewById(R.id.tv_cache_tips) + downloadResultImg = findViewById(R.id.iv_download_Status) + + leftView?.setOnClickListener { + when { + isConfirm -> { + cacheHDOfflineData() + showNewContent(isLoading = true, false) + } + else -> { + dismiss() + } + } + } + + rightView?.setOnClickListener { + when { + isRetry -> { + cacheHDOfflineData() + } + else -> { + dismiss() + } + } + } + + okView?.setOnClickListener { + dismiss() + } + } + + private fun cacheHDOfflineData() { + CallerMapUIServiceManager.cacheHDDataByCity(object : IHdCacheListener { + override fun onMapHdCacheProgress(cityId: Int, progress: Double) { + updateProgress(progress.toInt()) + } + }) + } + + @SuppressLint("SetTextI18n") + private fun updateProgress(progress: Int) { + if (this@OfflineMapDialog.isShowing) { + progressBar?.let { + if (it.visibility == View.VISIBLE) { + it.progress = if (progress in 1..5) 5 else progress + } + } + downloadPercentView?.text = "$progress%" + if (progress == 100) { + showNewContent(isLoading = false, true) + CallerHmiManager.updateHDDataCacheStatus(true) + } + } + } + + private fun change2NewStyle() { + roundRootLayout?.layoutParams?.width = AutoSizeUtils.dp2px(context, 1110f) + roundRootLayout?.layoutParams?.height = AutoSizeUtils.dp2px(context, 668f) + + val titleParams = offlineTitleView?.layoutParams as ConstraintLayout.LayoutParams + titleParams.topMargin = AutoSizeUtils.dp2px(context, 51f) + + val horizontalLineParams = horizontalLineView?.layoutParams as ConstraintLayout.LayoutParams + horizontalLineParams.topMargin = AutoSizeUtils.dp2px(context, 374f) + + progressBar?.visibility = View.VISIBLE + downloadPercentView?.visibility = View.VISIBLE + okView?.visibility = View.VISIBLE + + vertLineView?.visibility = View.GONE + leftView?.visibility = View.GONE + rightView?.visibility = View.GONE + cacheTipView?.visibility = View.INVISIBLE + } + + @SuppressLint("UseCompatLoadingForDrawables") + private fun showNewContent(isLoading: Boolean, isSuccess: Boolean) { + change2NewStyle() + when { + isLoading -> { + okView?.text = context.resources.getString(R.string.cancel) + offlineTitleView?.text = context.resources.getString(R.string.offline_downloading) + downloadResultImg?.visibility = View.GONE + } + else -> { + downloadResultImg?.visibility = View.VISIBLE + when { + isSuccess -> { + okView?.visibility = View.VISIBLE + okView?.text = context.resources.getString(R.string.ok_tip) + offlineTitleView?.text = context.resources.getString(R.string.offline_download_success) + progressBar?.visibility = View.GONE + downloadPercentView?.visibility = View.GONE + downloadResultImg?.background = ContextCompat.getDrawable(context, R.drawable.download_success_icon) + } + else -> { + offlineTitleView?.text = context.resources.getString(R.string.offline_download_failure) + okView?.visibility = View.GONE + progressBar?.visibility = View.GONE + downloadPercentView?.visibility = View.GONE + leftView?.visibility = View.VISIBLE + rightView?.visibility = View.VISIBLE + vertLineView?.visibility = View.VISIBLE + rightView?.text = context.resources.getString(R.string.retry) + downloadResultImg?.background = ContextCompat.getDrawable(context, R.drawable.download_fail_icon) + } + } + } + } + } +} \ 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/tools/AutoPilotAndCheckView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/AutoPilotAndCheckView.kt index b6025d5503..b9b5274d05 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/AutoPilotAndCheckView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/AutoPilotAndCheckView.kt @@ -197,6 +197,10 @@ internal class AutoPilotAndCheckView @JvmOverloads constructor( systemVersionView?.showAdUpgradeStatus(ipcUpgradeStateInfo) } + fun updateHDDataCacheStatus(isCached: Boolean) { + systemVersionView?.updateHDDataCacheStatus(isCached) + } + override fun onAttachedToWindow() { super.onAttachedToWindow() CallerAutoPilotStatusListenerManager.addListener(TAG, this) 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 913da911a7..6875daab9d 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 @@ -10,10 +10,15 @@ import com.mogo.eagle.core.data.bindingcar.AdUpgradeStateHelper import com.mogo.eagle.core.data.bindingcar.IPCUpgradeStateInfo import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener import com.mogo.eagle.core.function.api.devatools.IMoGoDevaToolsListener +import com.mogo.eagle.core.function.api.bindingcar.IMoGoBindingCarListener import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsListenerManager import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager +import com.mogo.eagle.core.function.call.bindingcar.CallerBindingCarListenerManager +import com.mogo.eagle.core.function.call.bindingcar.CallerBindingcarManager +import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager import com.mogo.eagle.core.function.hmi.R +import com.mogo.eagle.core.function.hmi.ui.map.OfflineMapDialog import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_HMI import com.mogo.eagle.core.utilcode.util.AppUtils @@ -135,6 +140,12 @@ class SystemVersionView @JvmOverloads constructor( } + ivHDCache.setOnClickListener { + OfflineMapDialog(context).show() + } + + updateHDDataCacheStatus(CallerMapUIServiceManager.isCityDataCached()) + if(AdUpgradeStateHelper.isConfirmUpgrade()){ //将角标改为“下载中” ivAdStatus?.setImageResource(R.drawable.icon_downloading) @@ -239,6 +250,16 @@ class SystemVersionView @JvmOverloads constructor( } + fun updateHDDataCacheStatus(isCached: Boolean) { + if (isCached) { + ivHDCacheStatus?.setImageResource(R.drawable.icon_latest_version) + ivHDCache.isEnabled = false + } else { + ivHDCacheStatus?.setImageResource(R.drawable.icon_be_updated) + ivHDCache.isEnabled = true + } + } + /** * 展示当前鹰眼版本 */ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/download_fail_icon.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/download_fail_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..809d7ee41430fdcc7ad9423a11b4352f3d3c7257 GIT binary patch literal 8253 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 literal 0 HcmV?d00001 diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/download_success_icon.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/download_success_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f6f1197a934c28a588dbdf678769c3f667b40c34 GIT binary patch literal 9547 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/dialog_offline_map.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/dialog_offline_map.xml new file mode 100644 index 0000000000..6ae72b0a13 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/dialog_offline_map.xml @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_system_version.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_system_version.xml index ce0064ad18..3972c865ff 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_system_version.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_system_version.xml @@ -82,7 +82,6 @@ android:visibility="gone" /> - + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/values/color.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/values/color.xml index 574b9fc2f3..ff8c61e6bf 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/values/color.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/values/color.xml @@ -71,7 +71,5 @@ #FF282F62 #FFFFFF - - - + #E63B4577 \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml index f12f7f9bc0..9af0f3ad70 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml @@ -65,4 +65,11 @@ 车辆将开启自动驾驶,并行驶至: 确认 取消 + 离线地图缓存提醒 + 是否缓存最新版本离线地图? + 离线地图下载中 + 离线地图下载成功 + 离线地图下载失败 + 确定 + 重试 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 new file mode 100644 index 0000000000..42b0cadcfc --- /dev/null +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoWaringProvider.kt @@ -0,0 +1,20 @@ +package com.mogo.eagle.core.function.api.hmi.warning + +import android.view.View +import android.view.ViewGroup +import com.mogo.eagle.core.data.bindingcar.IPCUpgradeStateInfo +import com.mogo.eagle.core.data.enums.WarningDirectionEnum +import com.mogo.eagle.core.data.map.Infrastructure +import com.mogo.eagle.core.data.notice.NoticeNormalData +import com.mogo.eagle.core.data.notice.NoticeTrafficStylePushData +import com.mogo.eagle.core.data.report.ReportEntity +import com.mogo.eagle.core.function.api.hmi.IMoGoHmiViewProxy +import com.mogo.eagle.core.function.api.hmi.view.IOchBusView + +/** + * @author xiaoyuzhou + * @date 2021/8/2 7:36 下午 + */ +interface IMoGoWaringProvider : IMoGoHmiViewProxy { + fun updateHDDataCacheStatus(isCached: 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 8339a0c006..b6aca6f544 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 @@ -212,4 +212,7 @@ object CallerHmiManager { hmiProviderApi?.updateStatusBarDownloadView(insert, tag, progress) } + fun updateHDDataCacheStatus(isCached: Boolean) { + waringProviderApi?.updateHDDataCacheStatus(isCached) + } } \ No newline at end of file diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapUIServiceManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapUIServiceManager.kt index cb8288ae15..0562c116ee 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapUIServiceManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapUIServiceManager.kt @@ -5,7 +5,9 @@ import com.mogo.eagle.core.data.constants.MogoServicePaths import com.mogo.eagle.core.function.api.map.IMogoMapService import com.mogo.eagle.core.function.api.map.marker.IMogoMarkerService import com.mogo.eagle.core.function.call.base.CallerBase -import com.mogo.map.location.IMogoGDLocationClient +import com.mogo.map.hdcache.IHdCacheListener +import com.mogo.map.listener.IMogoHosListenerRegister +import com.mogo.map.location.IMogoLocationClient import com.mogo.map.marker.IMogoMarkerManager import com.mogo.map.overlay.IMogoOverlayManager import com.mogo.map.uicontroller.IMogoMapUIController @@ -30,6 +32,14 @@ object CallerMapUIServiceManager { return serviceProvider?.markerService } + fun cacheHDDataByCity(listener: IHdCacheListener) { + serviceProvider?.mapUIController?.cacheHDDataByCity(listener) + } + + fun isCityDataCached(): Boolean { + return serviceProvider?.mapUIController?.isCityDataCached ?: true + } + fun getOverlayManager(): IMogoOverlayManager?{ return serviceProvider?.overlayManager } diff --git a/gradle.properties b/gradle.properties index dd72d41281..9578aa5a52 100644 --- a/gradle.properties +++ b/gradle.properties @@ -85,7 +85,7 @@ MOGO_LOCATION_VERSION=1.4.4.2 MOGO_TELEMATIC_VERSION=1.4.4.2 ######## MogoAiCloudSDK Version ######## # 自研地图 -MAP_SDK_VERSION=2.10.0.2_test_01 +MAP_SDK_VERSION=2.10.0.2 MAP_SDK_OPERATION_VERSION=1.1.4.1 # websocket WEBSOCKET_VERSION=1.1.7 diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/hdcache/IHdCacheListener.kt b/libraries/mogo-map-api/src/main/java/com/mogo/map/hdcache/IHdCacheListener.kt new file mode 100644 index 0000000000..4761e40fff --- /dev/null +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/hdcache/IHdCacheListener.kt @@ -0,0 +1,5 @@ +package com.mogo.map.hdcache + +interface IHdCacheListener { + fun onMapHdCacheProgress(cityId: Int, progress: Double) +} \ No newline at end of file diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java index 362b48f839..8235fe8a36 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java @@ -9,6 +9,9 @@ import androidx.annotation.RawRes; import com.mogo.eagle.core.data.map.CenterLine; import com.mogo.eagle.core.data.map.MogoLatLng; +import com.mogo.map.hdcache.IHdCacheListener; + +import org.json.JSONObject; import com.mogo.eagle.core.data.map.MogoLocation; import java.util.List; @@ -348,4 +351,11 @@ public interface IMogoMapUIController { * @param color // color:"#RRGGBB* */ void setPointCloudColor(String color); + void cacheHDDataByCity(IHdCacheListener listener); + + /** + * 当前城市离线数据是否已缓存 + * @return + */ + boolean isCityDataCached(); } diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java b/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java index e264f883ad..e46408c5f2 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java +++ b/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java @@ -23,6 +23,7 @@ import android.util.Log; import android.view.MotionEvent; import android.view.View; +import androidx.annotation.MainThread; import androidx.annotation.NonNull; import com.mogo.commons.debug.DebugConfig; @@ -40,13 +41,17 @@ import com.mogo.eagle.core.function.call.map.CallerMapStyleListenerManager; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.mogo.toast.TipToast; import com.mogo.eagle.core.utilcode.util.UiThreadHandler; +import com.mogo.map.hdcache.IHdCacheListener; import com.mogo.map.listener.MogoMapListenerHandler; +import com.mogo.map.location.GDLocationClient; +import com.mogo.map.navi.MogoCarLocationChangedListenerRegister; import com.mogo.map.uicontroller.CarCursorOption; import com.mogo.map.uicontroller.EnumMapUI; import com.mogo.map.uicontroller.IMogoMapUIController; import com.mogo.map.uicontroller.MapCameraPosition; import com.mogo.map.uicontroller.MapControlResult; import com.mogo.map.uicontroller.VisualAngleMode; +import com.mogo.map.utils.HDMapUtils; import com.mogo.map.utils.MogoMapUtils; import com.mogo.map.utils.ObjectUtils; import com.mogo.map.utils.ResIdCache; @@ -64,6 +69,7 @@ import com.zhidaoauto.map.sdk.open.business.PointCloudHelper; import com.zhidaoauto.map.sdk.open.camera.CameraPosition; import com.zhidaoauto.map.sdk.open.camera.CameraUpdateFactory; import com.zhidaoauto.map.sdk.open.camera.LatLngBounds; +import com.zhidaoauto.map.sdk.open.data.CityInfo; import com.zhidaoauto.map.sdk.open.data.MapDataApi; import com.zhidaoauto.map.sdk.open.location.LocationClient; import com.zhidaoauto.map.sdk.open.location.MyLocationStyle; @@ -115,6 +121,8 @@ public class AMapViewWrapper implements IMogoMapView, private boolean mIsFirstLocated = true; private boolean mIsDelayed = false; + private IHdCacheListener hdCacheListener; + public AMapViewWrapper(MapAutoView mMapView) { CallerLogger.INSTANCE.i(M_MAP + TAG, "autoop--AMapViewWrapper: init"); this.mMapView = mMapView; @@ -1035,4 +1043,47 @@ public class AMapViewWrapper implements IMogoMapView, } + + @Override + public void cacheHDDataByCity(IHdCacheListener listener) { + if (mMapView.getMapAutoViewHelper() != null) { + String gdCityCode = GDLocationClient.getInstance(getContext()).getLastCityCode(); + Integer id = HDMapUtils.getHDCityCode(gdCityCode); + if (id != null) { + hdCacheListener = listener; + mMapView.getMapAutoViewHelper().cacheHDDataByCity(id, (cityId, progress) -> { + if (Thread.currentThread() == Looper.getMainLooper().getThread()) { + if (hdCacheListener != null) { + hdCacheListener.onMapHdCacheProgress(cityId, progress * 100); + } + } else { + UiThreadHandler.post(() -> { + if (hdCacheListener != null) { + hdCacheListener.onMapHdCacheProgress(cityId, progress * 100); + } + }); + } + }); + } + } + } + + @Override + public boolean isCityDataCached() { + if (mMapView.getMapAutoViewHelper() != null) { + String gdCityCode = GDLocationClient.getInstance(getContext()).getLastCityCode(); + Integer id = HDMapUtils.getHDCityCode(gdCityCode); + if (id != null) { + List cityInfoList = mMapView.getMapAutoViewHelper().getAllCityCode(); + if (cityInfoList != null) { + for (CityInfo cityInfo : cityInfoList) { + if (id == cityInfo.getCityCode()) { + return cityInfo.isCache; + } + } + } + } + } + return true; + } } diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java index f525de00c5..fbbb4ab578 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java +++ b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java @@ -2,12 +2,14 @@ package com.mogo.map; import android.graphics.Point; import android.graphics.Rect; +import android.location.Location; import android.view.View; import com.mogo.eagle.core.data.map.CenterLine; import com.mogo.eagle.core.data.map.MogoLatLng; import com.mogo.eagle.core.data.map.MogoLocation; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; +import com.mogo.map.hdcache.IHdCacheListener; import com.mogo.map.uicontroller.AMapUIController; import com.mogo.map.uicontroller.CarCursorOption; import com.mogo.map.uicontroller.IMogoMapUIController; @@ -449,4 +451,19 @@ public class MogoMapUIController implements IMogoMapUIController { mDelegate.setPointCloudColor(color); } } + + @Override + public void cacheHDDataByCity(IHdCacheListener listener) { + if (mDelegate != null) { + mDelegate.cacheHDDataByCity(listener); + } + } + + @Override + public boolean isCityDataCached() { + if (mDelegate != null) { + return mDelegate.isCityDataCached(); + } + return true; + } } diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/uicontroller/AMapUIController.java b/libraries/mogo-map/src/main/java/com/mogo/map/uicontroller/AMapUIController.java index 9da7c35e7a..f48f36cc66 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/uicontroller/AMapUIController.java +++ b/libraries/mogo-map/src/main/java/com/mogo/map/uicontroller/AMapUIController.java @@ -6,6 +6,7 @@ import android.view.View; import com.mogo.eagle.core.data.map.CenterLine; import com.mogo.eagle.core.data.map.MogoLatLng; +import com.mogo.map.hdcache.IHdCacheListener; import com.mogo.eagle.core.data.map.MogoLocation; import com.zhidaoauto.map.sdk.open.MapAutoApi; @@ -389,4 +390,19 @@ public class AMapUIController implements IMogoMapUIController { mClient.setPointCloudColor(color); } } + + @Override + public void cacheHDDataByCity(IHdCacheListener listener) { + if (mClient != null) { + mClient.cacheHDDataByCity(listener); + } + } + + @Override + public boolean isCityDataCached() { + if (mClient != null) { + return mClient.isCityDataCached(); + } + return true; + } } diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/utils/HDMapUtils.kt b/libraries/mogo-map/src/main/java/com/mogo/map/utils/HDMapUtils.kt new file mode 100644 index 0000000000..b15a5c2704 --- /dev/null +++ b/libraries/mogo-map/src/main/java/com/mogo/map/utils/HDMapUtils.kt @@ -0,0 +1,27 @@ +package com.mogo.map.utils + +object HDMapUtils { + private val cityCodeMap by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { + val map = HashMap() + map["0831"] = 5115// 宜宾市 + map["0512"] = 3205// 苏州市 + map["0872"] = 5329// 大理市 + map["0711"] = 4207// 鄂州市 + map["028"] = 5101// 成都市 + map["0931"] = 6201// 兰州市 + map["0535"] = 3706// 烟台市 + map["027"] = 4201// 武汉市 + map["010"] = 1101// 北京市 + map["0734"] = 4304// 衡阳市 + map + } + + /** + * gdCityCode: 高德CityCode + * return: 高精地图CityCode + */ + @JvmStatic + fun getHDCityCode(gdCityCode: String?): Int? { + return cityCodeMap[gdCityCode] + } +} \ No newline at end of file