From 4ead3e2b3298bb7112811ce24942478d5072a55b Mon Sep 17 00:00:00 2001 From: chenfufeng Date: Wed, 22 Feb 2023 21:30:42 +0800 Subject: [PATCH] =?UTF-8?q?[2.14.0][Fix]=E8=A7=A3=E5=86=B3=E9=A6=96?= =?UTF-8?q?=E6=AC=A1=E5=AE=89=E8=A3=85App=E6=97=B6=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E8=8E=B7=E5=BE=97=E9=AB=98=E5=BE=B7=E5=AE=9A=E4=BD=8D=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../function/hmi/ui/map/OfflineMapDialog.kt | 30 +++++++-- .../hmi/ui/widget/SystemVersionView.kt | 65 ++++++++++++------- .../src/main/res/values/strings.xml | 1 + .../call/map/CallerMapUIServiceManager.kt | 9 +++ .../uicontroller/IMogoMapUIController.java | 5 ++ .../java/com/mogo/map/AMapViewWrapper.java | 46 ++++++++++++- .../com/mogo/map/MogoMapUIController.java | 16 +++++ .../map/uicontroller/AMapUIController.java | 16 +++++ 8 files changed, 158 insertions(+), 30 deletions(-) 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 2f649553a8..65da8e1fa6 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 @@ -6,11 +6,9 @@ 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.data.map.MogoLocation 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 @@ -40,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) @@ -92,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()) } @@ -103,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 f3291ce9c3..69dd501adc 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,11 +8,14 @@ import androidx.constraintlayout.widget.ConstraintLayout import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo import com.mogo.eagle.core.data.bindingcar.AdUpgradeStateHelper import com.mogo.eagle.core.data.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.bindingcar.IMoGoBindingCarListener +import com.mogo.eagle.core.function.api.map.listener.IMoGoMapLocationListener import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager 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.CallerMapLocationListenerManager 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 @@ -34,7 +37,8 @@ class SystemVersionView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 -) : ConstraintLayout(context, attrs, defStyleAttr), IMoGoAutopilotStatusListener,IMoGoBindingCarListener { +) : ConstraintLayout(context, attrs, defStyleAttr), IMoGoAutopilotStatusListener, + IMoGoBindingCarListener, IMoGoMapLocationListener { companion object { const val TAG = "SystemVersionView" @@ -44,14 +48,15 @@ class SystemVersionView @JvmOverloads constructor( private var dockerVersion: String? = null //工控机版本 private var autopilotStatus: Int? = null //自动驾驶状态 0代表不可自动驾驶,1代表可自动驾驶,2代表自动驾驶中 - private var ipcUpgradeStateInfo: IPCUpgradeStateInfo?=null + private var ipcUpgradeStateInfo: IPCUpgradeStateInfo? = null private var needQueryContainers: Boolean = false - private var dockerList: List?=null + private var dockerList: List? = null private var previousProgress: Int = -1 //前一秒的下载进度,用于计算下载剩余时间 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) @@ -98,15 +103,16 @@ class SystemVersionView @JvmOverloads constructor( when { AdUpgradeStateHelper.isDownloading(it.status) -> { //下载中,点击Toast提示:下载剩余时间 - it.progress?.let { progress-> - progress.progressDetail?.let {progressDetail-> - if(AdUpgradeStateHelper.getRemainingTime( + it.progress?.let { progress -> + progress.progressDetail?.let { progressDetail -> + if (AdUpgradeStateHelper.getRemainingTime( progressDetail.total, previousProgress, currentProgress - ).isEmpty()){ + ).isEmpty() + ) { ToastUtils.showShort("下载已完成") - }else{ + } else { ToastUtils.showShort( "预计" + AdUpgradeStateHelper.getRemainingTime( progressDetail.total, @@ -143,13 +149,23 @@ 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() + } } } updateHDDataCacheStatus(CallerMapUIServiceManager.isCityDataCached()) - if(AdUpgradeStateHelper.isConfirmUpgrade()){ + if (AdUpgradeStateHelper.isConfirmUpgrade()) { //将角标改为“下载中” ivAdStatus?.setImageResource(R.drawable.icon_downloading) ivAdVersion?.setBackgroundResource(R.drawable.version_latest_background) @@ -165,7 +181,7 @@ class SystemVersionView @JvmOverloads constructor( private fun setAdUpgradeInfo(ipcUpgradeStateInfo: IPCUpgradeStateInfo) { this.previousProgress = this.currentProgress ipcUpgradeStateInfo.progress?.let { - it.progressDetail?.let {progressDetail-> + it.progressDetail?.let { progressDetail -> this.currentProgress = progressDetail.current } } @@ -176,22 +192,22 @@ class SystemVersionView @JvmOverloads constructor( * 展示工控机下载、升级状态信息 * */ - fun showAdUpgradeStatus(ipcUpgradeStateInfo: IPCUpgradeStateInfo){ - ThreadUtils.runOnUiThread{ + fun showAdUpgradeStatus(ipcUpgradeStateInfo: IPCUpgradeStateInfo) { + ThreadUtils.runOnUiThread { setAdUpgradeInfo(ipcUpgradeStateInfo) AdUpgradeStateHelper.setUpgradeableStatus(false) - ipcUpgradeStateInfo.status.let {status-> + ipcUpgradeStateInfo.status.let { status -> when { AdUpgradeStateHelper.isDownloading(status) -> { //正在下载,展示“下载中”角标,展示进度条,并设置当前下载进度 ivAdStatus?.setImageResource(R.drawable.icon_downloading) - adCircularProgressView?.let {adCircularProgressView-> + adCircularProgressView?.let { adCircularProgressView -> adCircularProgressView.visibility = View.VISIBLE CallerLogger.i( "$M_HMI$$TAG", "showAdUpgradeStatus status=$status" ) - ipcUpgradeStateInfo.progress?.let { progress-> - progress.progressDetail?.let {progressDetail-> + ipcUpgradeStateInfo.progress?.let { progress -> + progress.progressDetail?.let { progressDetail -> adCircularProgressView.setProgress( AdUpgradeStateHelper.downloadProgress( progressDetail.current, @@ -212,14 +228,14 @@ class SystemVersionView @JvmOverloads constructor( ivAdVersion?.setBackgroundResource(R.drawable.version_latest_background) AdUpgradeStateHelper.setConfirmUpgrade(false) } - AdUpgradeStateHelper.isDownloadFinish(status) ->{ + AdUpgradeStateHelper.isDownloadFinish(status) -> { //升级中,将状态设为“升级中”角标,并隐藏进度条 ivAdStatus?.setImageResource(R.drawable.icon_upgrading) adCircularProgressView?.visibility = View.GONE ivAdVersion?.setBackgroundResource(R.drawable.version_latest_background) AdUpgradeStateHelper.setConfirmUpgrade(false) } - AdUpgradeStateHelper.isUpgrading(status) ->{ + AdUpgradeStateHelper.isUpgrading(status) -> { //升级中,将状态设为“升级中”角标,并隐藏进度条 ivAdStatus?.setImageResource(R.drawable.icon_upgrading) adCircularProgressView?.visibility = View.GONE @@ -291,7 +307,8 @@ class SystemVersionView @JvmOverloads constructor( return } CallerAutoPilotStatusListenerManager.addListener(TAG, this) - CallerBindingCarListenerManager.registerDevaToolsLogCatchListener(TAG,this) + CallerBindingCarListenerManager.registerDevaToolsLogCatchListener(TAG, this) + CallerMapLocationListenerManager.addListener(TAG, this, true) needQueryContainers = true } @@ -302,6 +319,7 @@ class SystemVersionView @JvmOverloads constructor( } CallerAutoPilotStatusListenerManager.removeListener(TAG) CallerBindingCarListenerManager.unRegisterDevaToolsLogCatchListener(TAG) + CallerMapLocationListenerManager.removeListener(TAG, true) needQueryContainers = false } @@ -332,13 +350,13 @@ class SystemVersionView @JvmOverloads constructor( */ override fun queryContainersResponse(dockerList: List) { this.dockerList = dockerList - if(dockerList.isNotEmpty()){ + if (dockerList.isNotEmpty()) { //有更新任务,将状态设为“可升级”角标,并隐藏进度条 ivAdStatus?.setImageResource(R.drawable.icon_upgradeable) adCircularProgressView?.visibility = View.GONE ivAdVersion?.setBackgroundResource(R.drawable.version_upgradeable_background) AdUpgradeStateHelper.setUpgradeableStatus(true) - }else{ + } else { ToastUtils.showLong("已是最新版本") ivAdStatus?.setImageResource(R.drawable.icon_latest_version) adCircularProgressView?.visibility = View.GONE @@ -360,4 +378,7 @@ class SystemVersionView @JvmOverloads constructor( adCircularProgressView?.visibility = View.GONE } + override fun onLocationChanged(location: MogoLocation?, from: Int, isGps: Boolean) { + this.location = location + } } \ 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 6bae6b18ef..f51a9b7018 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 @@ -59,6 +59,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 180dcaa281..c725af6f6d 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 @@ -48,6 +49,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 } @@ -55,4 +60,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 920e4b64cb..9e8cd3e42f 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 @@ -10,6 +10,7 @@ import androidx.annotation.RawRes; 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.map.hdcache.IHdCacheListener; import org.json.JSONObject; @@ -343,6 +344,8 @@ public interface IMogoMapUIController { void cacheHDDataByCity(IHdCacheListener listener); + void cacheHDDataByCity(IHdCacheListener listener, MogoLocation location); + /** * 当前城市离线数据是否已缓存 * @return @@ -350,4 +353,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 8fab38a2af..99c0564121 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 @@ -395,7 +395,7 @@ public class AMapViewWrapper implements IMogoMapView, @Override public void setRomaMode(int mode) { - mMapView.getMapAutoViewHelper().setRoamStyle(mode,1800, MapAutoApi.ROAM_SPEED_40); + mMapView.getMapAutoViewHelper().setRoamStyle(mode, 1800, MapAutoApi.ROAM_SPEED_40); } @Override @@ -448,7 +448,6 @@ public class AMapViewWrapper implements IMogoMapView, } /** - * * @return true-是,false=不是 */ private boolean isVrMold() { @@ -1219,6 +1218,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) { @@ -1244,4 +1281,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 90eead43e5..96c0e1e225 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 @@ -7,6 +7,7 @@ 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.CarCursorOption; @@ -451,6 +452,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) { @@ -465,4 +473,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 793df718de..1975277335 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 @@ -8,6 +8,7 @@ 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.map.hdcache.IHdCacheListener; import com.zhidaoauto.map.sdk.open.MapAutoApi; @@ -384,6 +385,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) { @@ -398,4 +406,12 @@ public class AMapUIController implements IMogoMapUIController { mClient.cancelDownloadCacheData(); } } + + @Override + public String getCityCode() { + if (mClient != null) { + return mClient.getCityCode(); + } + return null; + } }