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
index e7c083b27e..1a9e2e7e02 100644
--- 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
@@ -8,6 +8,7 @@ import android.widget.ProgressBar
import android.widget.TextView
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.content.ContextCompat
+import com.mogo.eagle.core.data.map.MogoLocation
import com.mogo.eagle.core.function.call.hmi.CallerHmiListenerManager
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager
import com.mogo.eagle.core.function.hmi.R
@@ -37,6 +38,8 @@ class OfflineMapDialog(context: Context): BaseFloatDialog(context) {
private var isConfirm = true
private var isRetry = false
+ var location: MogoLocation? = null
+
init {
setContentView(R.layout.dialog_offline_map)
setCanceledOnTouchOutside(true)
@@ -89,8 +92,8 @@ class OfflineMapDialog(context: Context): BaseFloatDialog(context) {
}
}
- private fun cacheHDOfflineData() {
- CallerMapUIServiceManager.cacheHDDataByCity(object : IHdCacheListener {
+ private fun cacheHDDataByCityByLonLat() {
+ CallerMapUIServiceManager.cacheHDDataByCityByLonLat(object : IHdCacheListener {
override fun onMapHdCacheProgress(cityId: Int, progress: Double) {
updateProgress(progress.toInt())
}
@@ -100,7 +103,25 @@ class OfflineMapDialog(context: Context): BaseFloatDialog(context) {
showNewContent(isLoading = false, false)
}
}
- })
+ }, location!!)
+ }
+
+ private fun cacheHDOfflineData() {
+ if (location == null) {// 拿到了高德地图的cityCode
+ CallerMapUIServiceManager.cacheHDDataByCity(object : IHdCacheListener {
+ override fun onMapHdCacheProgress(cityId: Int, progress: Double) {
+ updateProgress(progress.toInt())
+ }
+
+ override fun onMapHdCacheResult(cityId: Int, state: Int) {
+ if (state == 0) {// 失败
+ showNewContent(isLoading = false, false)
+ }
+ }
+ })
+ } else {// 只拿到了高精的经纬度
+ cacheHDDataByCityByLonLat()
+ }
}
@SuppressLint("SetTextI18n")
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 1418bac233..fe3788f461 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
@@ -8,10 +8,13 @@ import androidx.constraintlayout.widget.ConstraintLayout
import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo
import com.mogo.eagle.core.data.deva.bindingcar.AdUpgradeStateHelper
import com.mogo.eagle.core.data.deva.bindingcar.IPCUpgradeStateInfo
+import com.mogo.eagle.core.data.map.MogoLocation
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener
+import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationWGS84Listener
import com.mogo.eagle.core.function.api.devatools.IMoGoDevaToolsListener
import com.mogo.eagle.core.function.api.hmi.autopilot.IMoGoCheckAutoPilotBtnListener
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager
+import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager
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.hmi.CallerHmiListenerManager
@@ -37,7 +40,7 @@ class SystemVersionView @JvmOverloads constructor(
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : ConstraintLayout(context, attrs, defStyleAttr), IMoGoAutopilotStatusListener,
- IMoGoDevaToolsListener, IMoGoCheckAutoPilotBtnListener {
+ IMoGoDevaToolsListener, IMoGoCheckAutoPilotBtnListener, IMoGoChassisLocationWGS84Listener {
companion object {
const val TAG = "SystemVersionView"
@@ -55,6 +58,7 @@ class SystemVersionView @JvmOverloads constructor(
private var currentProgress: Int = -1 //当前已下载包体大小
private var isHDCached = false
+ private var location: MogoLocation? = null
init {
LayoutInflater.from(context).inflate(R.layout.view_system_version, this, true)
@@ -137,7 +141,17 @@ class SystemVersionView @JvmOverloads constructor(
if (isHDCached) {// 已缓存
ToastUtils.showShort(resources.getString(R.string.offline_had_downloaded))
} else {// 未缓存
- OfflineMapDialog(context).show()
+ if (CallerMapUIServiceManager.getCityCode().isNullOrEmpty()) {// 未拿到高德的cityCode
+ if (location == null || (location!!.longitude <= 0.0 && location!!.latitude <= 0.0)) {// 未拿到高精的经纬度
+ ToastUtils.showShort(resources.getString(R.string.location_try_again))
+ } else {// 拿到了高精的经纬度
+ val dialog = OfflineMapDialog(context)
+ dialog.location = location
+ dialog.show()
+ }
+ } else {// 拿到高德的cityCode
+ OfflineMapDialog(context).show()
+ }
}
}
@@ -292,6 +306,7 @@ class SystemVersionView @JvmOverloads constructor(
CallerHmiListenerManager.addListener(TAG, this)
CallerAutoPilotStatusListenerManager.addListener(TAG, this)
CallerDevaToolsListenerManager.addListener(TAG,this)
+ CallerChassisLocationWGS84ListenerManager.addListener(TAG, this)
needQueryContainers = true
}
@@ -303,6 +318,7 @@ class SystemVersionView @JvmOverloads constructor(
CallerHmiListenerManager.removeListener(TAG)
CallerAutoPilotStatusListenerManager.removeListener(TAG)
CallerDevaToolsListenerManager.removeListener(TAG)
+ CallerChassisLocationWGS84ListenerManager.removeListener(TAG)
needQueryContainers = false
}
@@ -361,4 +377,7 @@ class SystemVersionView @JvmOverloads constructor(
adCircularProgressView?.visibility = View.GONE
}
+ override fun onChassisLocationWGS84(gnssInfo: MogoLocation) {
+ location = gnssInfo
+ }
}
\ 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 325ba8e816..bcfc49ef69 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
@@ -75,6 +75,7 @@
离线地图下载成功
离线地图下载失败
当前已为最新版本
+ 请检查定位是否正常
确定
重试
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 6db8e65512..a7bedbeda3 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
@@ -2,6 +2,7 @@ package com.mogo.eagle.core.function.call.map
import android.content.Context
import com.mogo.eagle.core.data.constants.MogoServicePaths
+import com.mogo.eagle.core.data.map.MogoLocation
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
@@ -35,6 +36,10 @@ object CallerMapUIServiceManager {
serviceProvider?.mapUIController?.cacheHDDataByCity(listener)
}
+ fun cacheHDDataByCityByLonLat(listener: IHdCacheListener, location: MogoLocation) {
+ serviceProvider?.mapUIController?.cacheHDDataByCity(listener, location)
+ }
+
fun isCityDataCached(): Boolean {
return serviceProvider?.mapUIController?.isCityDataCached ?: false
}
@@ -50,4 +55,8 @@ object CallerMapUIServiceManager {
fun cancelDownloadCacheData() {
serviceProvider?.mapUIController?.cancelDownloadCacheData()
}
+
+ fun getCityCode(): String? {
+ return serviceProvider?.mapUIController?.cityCode
+ }
}
\ 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 50190778f2..12306b6eb4 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
@@ -360,6 +360,8 @@ public interface IMogoMapUIController {
void setPointCloudColor(String color);
void cacheHDDataByCity(IHdCacheListener listener);
+ void cacheHDDataByCity(IHdCacheListener listener, MogoLocation location);
+
/**
* 当前城市离线数据是否已缓存
* @return
@@ -367,4 +369,6 @@ public interface IMogoMapUIController {
boolean isCityDataCached();
void cancelDownloadCacheData();
+
+ String getCityCode();
}
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 06e6fe5eb2..7c65130bd9 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
@@ -1075,6 +1075,44 @@ public class AMapViewWrapper implements IMogoMapView,
}
}
+ @Override
+ public void cacheHDDataByCity(IHdCacheListener listener, MogoLocation location) {
+ if (mMapView.getMapAutoViewHelper() != null) {
+ hdCacheListener = listener;
+ mMapView.getMapAutoViewHelper().cacheHDDataByCityByLonLat(location.getLongitude(), location.getLatitude(), new OnHdDataDownByCityListener() {
+ @Override
+ public void onMapHDDataCacheProgressByCity(int cityId, double 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 void onMapHDDataCacheStateByCity(int i, int state) {// 0失败,1成功
+ if (Thread.currentThread() == Looper.getMainLooper().getThread()) {
+ if (hdCacheListener != null) {
+ hdCacheListener.onMapHdCacheResult(i, state);
+ }
+ } else {
+ UiThreadHandler.post(() -> {
+ if (hdCacheListener != null) {
+ hdCacheListener.onMapHdCacheResult(i, state);
+ }
+ });
+ }
+ }
+ });
+ }
+ }
+
@Override
public boolean isCityDataCached() {
if (mMapView.getMapAutoViewHelper() != null) {
@@ -1100,4 +1138,9 @@ public class AMapViewWrapper implements IMogoMapView,
mMapView.getMapAutoViewHelper().cancelCacheHDData();
}
}
+
+ @Override
+ public String getCityCode() {
+ return GDLocationClient.getInstance(getContext()).getLastCityCode();
+ }
}
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 80605f5aed..ec7c4ad156 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
@@ -468,6 +468,13 @@ public class MogoMapUIController implements IMogoMapUIController {
}
}
+ @Override
+ public void cacheHDDataByCity(IHdCacheListener listener, MogoLocation location) {
+ if (mDelegate != null) {
+ mDelegate.cacheHDDataByCity(listener, location);
+ }
+ }
+
@Override
public boolean isCityDataCached() {
if (mDelegate != null) {
@@ -482,4 +489,12 @@ public class MogoMapUIController implements IMogoMapUIController {
mDelegate.cancelDownloadCacheData();
}
}
+
+ @Override
+ public String getCityCode() {
+ if (mDelegate != null) {
+ return mDelegate.getCityCode();
+ }
+ return null;
+ }
}
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 82f1a8756a..34234961e4 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
@@ -406,6 +406,13 @@ public class AMapUIController implements IMogoMapUIController {
}
}
+ @Override
+ public void cacheHDDataByCity(IHdCacheListener listener, MogoLocation location) {
+ if (mClient != null) {
+ mClient.cacheHDDataByCity(listener, location);
+ }
+ }
+
@Override
public boolean isCityDataCached() {
if (mClient != null) {
@@ -420,4 +427,12 @@ public class AMapUIController implements IMogoMapUIController {
mClient.cancelDownloadCacheData();
}
}
+
+ @Override
+ public String getCityCode() {
+ if (mClient != null) {
+ return mClient.getCityCode();
+ }
+ return null;
+ }
}