diff --git a/OCH/bus/passenger/src/main/java/com/mogo/och/bus/passenger/bean/ResponseSiteIntroduce.kt b/OCH/bus/passenger/src/main/java/com/mogo/och/bus/passenger/bean/ResponseSiteIntroduce.kt new file mode 100644 index 0000000000..d9ab5c0209 --- /dev/null +++ b/OCH/bus/passenger/src/main/java/com/mogo/och/bus/passenger/bean/ResponseSiteIntroduce.kt @@ -0,0 +1,16 @@ +package com.mogo.och.bus.passenger.bean + +import com.mogo.eagle.core.data.BaseData + +/** + * 网约车小巴路线接口请求响应结果 返回的是对应司机屏的线路信息 + * + * @author tongchenfei + */ +data class ResponseSiteIntroduce(val data: MutableList?) : BaseData(){ + + data class SiteIntroduceInfo(val siteId:Long,val introduceList:MutableList) + + data class IntroduceInfo(val type:Int,val url :String,val seq:Int) + +} diff --git a/OCH/bus/passenger/src/main/java/com/mogo/och/bus/passenger/model/OrderModel.kt b/OCH/bus/passenger/src/main/java/com/mogo/och/bus/passenger/model/OrderModel.kt index b8597b9f64..b70b2d6894 100644 --- a/OCH/bus/passenger/src/main/java/com/mogo/och/bus/passenger/model/OrderModel.kt +++ b/OCH/bus/passenger/src/main/java/com/mogo/och/bus/passenger/model/OrderModel.kt @@ -2,6 +2,7 @@ package com.mogo.och.bus.passenger.model import android.annotation.SuppressLint import android.content.Context +import com.mogo.commons.env.ProjectUtils import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.data.map.MogoLocation @@ -14,6 +15,7 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant import com.mogo.eagle.core.utilcode.util.GsonUtils import com.mogo.och.bus.passenger.bean.PM2RoutesResponse +import com.mogo.och.bus.passenger.bean.ResponseSiteIntroduce import com.mogo.och.bus.passenger.callback.IAutopilotStatusCallback import com.mogo.och.bus.passenger.callback.IBusPassegerDriverStatusCallback import com.mogo.och.bus.passenger.callback.IDrivingInfoCallback @@ -26,12 +28,14 @@ import com.mogo.och.common.module.biz.login.ILoginCallback import com.mogo.och.common.module.biz.login.LoginStatusEnum import com.mogo.och.common.module.biz.login.LoginStatusManager import com.mogo.och.common.module.biz.login.OpenOrderStatusEnum +import com.mogo.och.common.module.biz.media.MediaManager import com.mogo.och.common.module.manager.autopilot.autopilot.IOchAutopilotStatusListener import com.mogo.och.common.module.manager.autopilot.autopilot.OchAutoPilotStatusListenerManager import com.mogo.och.common.module.manager.autopilot.location.OchLocationManager import com.mogo.och.common.module.manager.distance.IDistanceListener import com.mogo.och.common.module.manager.distance.TrajectoryAndDistanceManager import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager +import com.mogo.och.common.module.manager.download.DownloadManager import com.mogo.och.common.module.manager.loop.BizLoopManager import com.mogo.och.common.module.manager.loop.LoopInfo import com.mogo.och.common.module.manager.socket.cloud.AbnormalFactorsLoopManager @@ -43,6 +47,7 @@ import com.mogo.och.common.module.manager.socket.lan.bean.TaskDetailsMsg import com.mogo.och.common.module.network.OchCommonServiceCallback import com.mogo.och.common.module.utils.OCHThreadPoolManager import com.mogo.och.common.module.utils.PinYinUtil +import com.mogo.och.common.module.wigets.media.MediaItem import com.mogo.och.data.bean.BusRoutesResult import com.mogo.och.data.bean.BusStationBean import com.mogo.och.data.bean.BusTransferData @@ -202,6 +207,9 @@ object OrderModel { "onReceivedServerSn = $sn" ) mDriverStatusCallback?.updateDriverSn(sn) + sn?.let { + querySiteIntroduce() + } } } @@ -213,6 +221,33 @@ object OrderModel { LanSocketManager.sendMsgToServer(msg) } + private fun querySiteIntroduce(){ + mContext?.let { + if (ProjectUtils.isSaas()) { + BusPassengerServiceManager.querySiteIntroduceBySn(it,object : OchCommonServiceCallback{ + override fun onSuccess(response: ResponseSiteIntroduce?) { + response?.let {response-> + downloadSiteIntroduce(response) + } + } + + override fun onFail(code: Int, msg: String?) { + + } + + }) + } + } + } + + private fun downloadSiteIntroduce(response: ResponseSiteIntroduce) { + response.data?.forEach {siteIntroduceInfo -> + siteIntroduceInfo.introduceList.forEach {introduceInfo -> + DownloadManager.downloadVideoFile(introduceInfo.url,null) + } + } + } + private fun queryDriverOperationStatus() { LoginStatusManager.addListener(TAG,object: ILoginCallback{ @@ -319,6 +354,13 @@ object OrderModel { endStation.longitude = endStationInfo.gcjLon endStation.latitude = endStationInfo.gcjLat TrajectoryAndDistanceManager.setStationPoint(startStation, endStation, lineId.toLong()) + val introductionList = mutableListOf() + endStationInfo.videoList.forEach { + if(it.type==1) { + introductionList.add(MediaItem(MediaItem.PrioritySite, it.url,MediaItem.MEDIA_TYPE_VIDEO,"","")) + } + } + MediaManager.postSiteIntroduceInfo(introductionList) } fun cleanStation(type: String) { diff --git a/OCH/bus/passenger/src/main/java/com/mogo/och/bus/passenger/network/BusPassengerServiceManager.kt b/OCH/bus/passenger/src/main/java/com/mogo/och/bus/passenger/network/BusPassengerServiceManager.kt index f7f2644a68..ce49576e04 100644 --- a/OCH/bus/passenger/src/main/java/com/mogo/och/bus/passenger/network/BusPassengerServiceManager.kt +++ b/OCH/bus/passenger/src/main/java/com/mogo/och/bus/passenger/network/BusPassengerServiceManager.kt @@ -6,9 +6,9 @@ import com.mogo.och.bus.passenger.bean.PM2RoutesResponse import com.mogo.cloud.passport.MoGoAiCloudClientConfig import com.mogo.commons.debug.DebugConfig import com.mogo.och.bus.passenger.bean.BusPassengerQueryLineRequest -import com.mogo.och.bus.passenger.bean.BusPassengerOperationStatusResponse import com.mogo.eagle.core.network.MoGoRetrofitFactory import com.mogo.commons.storage.SharedPrefsMgr +import com.mogo.och.bus.passenger.bean.ResponseSiteIntroduce import com.mogo.och.common.module.biz.lansocket.LoginLanPassengerSocket import com.mogo.och.common.module.constant.OchCommonConst import com.mogo.och.common.module.network.OchCommonServiceCallback @@ -51,5 +51,21 @@ object BusPassengerServiceManager { .subscribe(OchCommonSubscribeImpl(context, callback, "queryDriverSiteByCoordinate",false)) } } + /** + * 查询绑定行驶的小巴车路线 + * @param context + * @param callback + */ + @JvmStatic + fun querySiteIntroduceBySn( + context: Context, callback: OchCommonServiceCallback? + ) { + mBusPassengerSaasServiceApi.querySiteIntroduceBySn( + MoGoAiCloudClientConfig.getInstance().serviceAppId, + SharedPrefsMgr.getInstance().token, + LoginLanPassengerSocket.driverSn + ).transformTry() + .subscribe(OchCommonSubscribeImpl(context, callback, "querySiteIntroduceBySn")) + } } \ No newline at end of file diff --git a/OCH/bus/passenger/src/main/java/com/mogo/och/bus/passenger/network/PassengerSAASServiceApi.java b/OCH/bus/passenger/src/main/java/com/mogo/och/bus/passenger/network/PassengerSAASServiceApi.java index bcb7156d00..4c3ab1a8c7 100644 --- a/OCH/bus/passenger/src/main/java/com/mogo/och/bus/passenger/network/PassengerSAASServiceApi.java +++ b/OCH/bus/passenger/src/main/java/com/mogo/och/bus/passenger/network/PassengerSAASServiceApi.java @@ -1,8 +1,7 @@ package com.mogo.och.bus.passenger.network; -import com.mogo.och.bus.passenger.bean.BusPassengerOperationStatusResponse; -import com.mogo.och.bus.passenger.bean.BusPassengerQueryLineRequest; import com.mogo.och.bus.passenger.bean.PM2RoutesResponse; +import com.mogo.och.bus.passenger.bean.ResponseSiteIntroduce; import io.reactivex.Observable; import retrofit2.http.Body; @@ -26,4 +25,12 @@ public interface PassengerSAASServiceApi { @GET( "/och-bus-cabin/api/business/v1/driver/bus/lineDataWithDriver/query" ) Observable queryDriverSiteByCoordinate(@Header("appId") String appId, @Header("ticket") String ticket, @Query("sn") String sn); + /** + * 查询车辆对应站点的所有视频介绍视频 + * @return 接口返回数据 + */ + @Headers( {"Content-Type:application/json;charset=UTF-8"} ) + @GET( "/och-bus-cabin/api/business/v1/querySiteIntroduceBySn" ) + Observable querySiteIntroduceBySn(@Header("appId") String appId, @Header("ticket") String ticket, @Query("sn") String sn); + } diff --git a/OCH/common/biz/src/main/java/com/mogo/och/biz/login/ui/LoginFragment.kt b/OCH/common/biz/src/main/java/com/mogo/och/biz/login/ui/LoginFragment.kt index 96631bb239..7025d727f5 100644 --- a/OCH/common/biz/src/main/java/com/mogo/och/biz/login/ui/LoginFragment.kt +++ b/OCH/common/biz/src/main/java/com/mogo/och/biz/login/ui/LoginFragment.kt @@ -17,6 +17,7 @@ import com.mogo.commons.mvp.MvpFragment import com.mogo.commons.storage.SharedPrefsMgr import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.function.hmi.ui.setting.ToggleDebugView +import com.mogo.eagle.core.function.hmi.ui.widget.ColdStartView import com.mogo.eagle.core.utilcode.kotlin.onClick import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger @@ -43,6 +44,7 @@ import kotlinx.android.synthetic.main.biz_login_view.biz_login_svp import kotlinx.android.synthetic.main.biz_login_view.bv_switch_business import kotlinx.android.synthetic.main.biz_login_view.cl_login_info import kotlinx.android.synthetic.main.biz_login_view.eiv_Info +import kotlinx.android.synthetic.main.biz_login_view.viewColdStart import me.jessyan.autosize.utils.AutoSizeUtils @@ -106,56 +108,67 @@ class LoginFragment : MvpFragment(), ILoginView biz_login_svp.setIsTouchWigetFull(false) biz_login_svp.enableshowProgressDialog = false biz_login_svp.enableDoubleClick = false - gsyVideoOptionBuilder.setUrl(videoUrl) - .setCacheWithPlay(false) - .setPlayTag("TaxiPassengerArrivedView") - .build(biz_login_svp) - biz_login_svp.setVideoAllCallBack(object : GSYSampleCallBack() { - override fun onAutoComplete(url: String?, vararg objects: Any?) { - if (AppIdentityModeUtils.isT1T2(FunctionBuildConfig.appIdentityMode)) { - biz_login_svp?.setBackgroundResource(R.drawable.biz_login_bg_taxi_end) - }else{ - biz_login_svp?.setBackgroundResource(R.drawable.biz_login_bg_bus_end) - } + viewColdStart.setColdStartResultListener(object: ColdStartView.ColdStartResultListener{ + override fun coldStartSuccess() { + gsyVideoOptionBuilder.setUrl(videoUrl) + .setCacheWithPlay(false) + .setPlayTag("TaxiPassengerArrivedView") + .build(biz_login_svp) - } - }) - if (showLoginInfoAnimator1 == null) { - showLoginInfoAnimator1 = ObjectAnimator.ofFloat(cl_login_info, "alpha", 0f, 1f) - showLoginInfoAnimator1?.interpolator = LinearInterpolator() - } - if (showLoginInfoAnimator2 == null) { - val dp2px = AutoSizeUtils.dp2px(AbsMogoApplication.getApp(), -50f) - showLoginInfoAnimator2 = ObjectAnimator.ofFloat(cl_login_info, "translationY", 0f, dp2px.toFloat()) - showLoginInfoAnimator2?.interpolator = DecelerateInterpolator() - } - UiThreadHandler.postDelayed({ - cl_login_info?.let { - val animatorSet = AnimatorSet() - animatorSet.playTogether(showLoginInfoAnimator1, showLoginInfoAnimator2) - animatorSet.duration = 500 - animatorSet.addListener(object :AnimatorListener{ - override fun onAnimationStart(animation: Animator) { - cl_login_info?.visibility = View.VISIBLE - } - - override fun onAnimationEnd(animation: Animator) { + biz_login_svp.setVideoAllCallBack(object : GSYSampleCallBack() { + override fun onAutoComplete(url: String?, vararg objects: Any?) { + if (AppIdentityModeUtils.isT1T2(FunctionBuildConfig.appIdentityMode)) { + biz_login_svp?.setBackgroundResource(R.drawable.biz_login_bg_taxi_end) + }else{ + biz_login_svp?.setBackgroundResource(R.drawable.biz_login_bg_bus_end) + } } - - override fun onAnimationCancel(animation: Animator) { - - } - - override fun onAnimationRepeat(animation: Animator) { - - } - }) - animatorSet.start() + if (showLoginInfoAnimator1 == null) { + showLoginInfoAnimator1 = ObjectAnimator.ofFloat(cl_login_info, "alpha", 0f, 1f) + showLoginInfoAnimator1?.interpolator = LinearInterpolator() + } + if (showLoginInfoAnimator2 == null) { + val dp2px = AutoSizeUtils.dp2px(AbsMogoApplication.getApp(), -50f) + showLoginInfoAnimator2 = ObjectAnimator.ofFloat(cl_login_info, "translationY", 0f, dp2px.toFloat()) + showLoginInfoAnimator2?.interpolator = DecelerateInterpolator() + } + UiThreadHandler.postDelayed({ + cl_login_info?.let { + val animatorSet = AnimatorSet() + animatorSet.playTogether(showLoginInfoAnimator1, showLoginInfoAnimator2) + animatorSet.duration = 500 + animatorSet.addListener(object :AnimatorListener{ + override fun onAnimationStart(animation: Animator) { + cl_login_info?.visibility = View.VISIBLE + } + + override fun onAnimationEnd(animation: Animator) { + + } + + override fun onAnimationCancel(animation: Animator) { + + } + + override fun onAnimationRepeat(animation: Animator) { + + } + + }) + animatorSet.start() + } + },2_000,UiThreadHandler.MODE.QUEUE) + biz_login_svp.startPlayLogic() } - },2_000,UiThreadHandler.MODE.QUEUE) + + override fun coldStartFail() { + + } + + }) } inputPhoneNormal() @@ -304,7 +317,6 @@ class LoginFragment : MvpFragment(), ILoginView biz_cl_driver_main?.viewTreeObserver?.addOnGlobalLayoutListener(onlayoutListener) super.onResume() CallerLogger.d(TAG, "onResume") - biz_login_svp.startPlayLogic() } override fun onPause() { diff --git a/OCH/common/biz/src/main/res/layout/biz_login_view.xml b/OCH/common/biz/src/main/res/layout/biz_login_view.xml index e9a131814d..b77d3de518 100644 --- a/OCH/common/biz/src/main/res/layout/biz_login_view.xml +++ b/OCH/common/biz/src/main/res/layout/biz_login_view.xml @@ -180,4 +180,14 @@ android:layout_width="wrap_content" android:layout_height="wrap_content"/> + + \ No newline at end of file diff --git a/OCH/common/biz/src/main/res/values/strings.xml b/OCH/common/biz/src/main/res/values/strings.xml index 56bbdcd277..a26e09c02e 100644 --- a/OCH/common/biz/src/main/res/values/strings.xml +++ b/OCH/common/biz/src/main/res/values/strings.xml @@ -15,8 +15,5 @@ 网络异常,请稍后重试 请求出现异常,请稍后重试 - 取消 - 扫描二维码完成车辆绑定 - 我知道了 \ No newline at end of file diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/media/IMediaDispatch.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/media/IMediaDispatch.kt new file mode 100644 index 0000000000..d779b9a0a2 --- /dev/null +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/media/IMediaDispatch.kt @@ -0,0 +1,7 @@ +package com.mogo.och.common.module.biz.media + +import com.mogo.och.common.module.wigets.media.MediaItem + +interface IMediaDispatch { + fun diapatchMedia(list :MutableList) +} \ No newline at end of file diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/media/MediaManager.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/media/MediaManager.kt new file mode 100644 index 0000000000..5c2cb4c178 --- /dev/null +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/media/MediaManager.kt @@ -0,0 +1,15 @@ +package com.mogo.och.common.module.biz.media + +import com.mogo.och.common.module.utils.CallerBase +import com.mogo.och.common.module.wigets.media.MediaItem + +object MediaManager : CallerBase() { + + fun postSiteIntroduceInfo(list: MutableList){ + M_LISTENERS.forEach { + val listener = it.value + listener.diapatchMedia(list) + } + } + +} \ No newline at end of file diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/autopilot/OchAutoPilotStatusListenerManager.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/autopilot/OchAutoPilotStatusListenerManager.kt index fbc81bca6e..d6ff962296 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/autopilot/OchAutoPilotStatusListenerManager.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/autopilot/OchAutoPilotStatusListenerManager.kt @@ -143,6 +143,16 @@ object OchAutoPilotStatusListenerManager : CallerBase { + OchChainLogManager.writeChainLog("轨迹监控","onAutopilotGuardian() 加载轨迹文件失败", true, OchChainLogManager.EVENT_KEY_INFE_WITH_TRAJECTORY) + } + MogoReport.Code.Error.EMAP.TRA_NOT_EXIST -> { + OchChainLogManager.writeChainLog("轨迹监控","onAutopilotGuardian() 无法找到轨迹文件", true, OchChainLogManager.EVENT_KEY_INFE_WITH_TRAJECTORY) + } + else -> {} + } M_LISTENERS.forEach { val listener = it.value listener.onAutopilotGuardian(guardianInfo) diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/autopilot/OchAutopilotAnalytics.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/autopilot/OchAutopilotAnalytics.kt index 8f1faba2b3..6a0d2ba0cc 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/autopilot/OchAutopilotAnalytics.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/autopilot/OchAutopilotAnalytics.kt @@ -12,6 +12,7 @@ import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant import com.mogo.eagle.core.utilcode.util.DateTimeUtils import com.mogo.och.common.module.manager.autopilot.OCHAdasAbilityManager import com.mogo.och.common.module.manager.autopilot.autopilot.bean.SessionWithTime +import com.mogo.och.common.module.manager.autopilot.line.LineManager import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager import com.mogo.och.common.module.manager.loop.BizLoopManager import com.mogo.och.common.module.utils.RxUtils @@ -209,6 +210,7 @@ object OchAutopilotAnalytics { RxUtils.disposeSubscribe(timeOutDisposable) timeOutDisposable = RxUtils.createSubscribe(LOOP_PERIOD_15S) { triggerStartAutopilotFailureEvent("", "15s后app等待超时", System.currentTimeMillis()) + LineManager.invokeStartAutopilotTimeOut() } } } diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/line/LineManager.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/line/LineManager.kt index 80e94d6caf..09a57f03ac 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/line/LineManager.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/line/LineManager.kt @@ -8,9 +8,11 @@ import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters.AutoPilotLi import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters.AutoPilotLonLat import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.data.map.MogoLocation +import com.mogo.eagle.core.data.och.OchInfo import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationGCJ02Listener import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager +import com.mogo.eagle.core.function.call.datacenter.CallerDataCenterBizListener import com.mogo.eagle.core.function.call.map.CallerMapGlobalTrajectoryDrawManager import com.mogo.eagle.core.function.call.och.CallerEagleBaseFunctionCall4OchManager import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d @@ -77,6 +79,10 @@ object LineManager : CallerBase() { private var autopilotId: String by Delegates.observable("") { _, oldValue, newValue -> if (oldValue != newValue) { CallerEagleBaseFunctionCall4OchManager.setOchAutopilotOrderId(newValue) + getStations { start, end -> + CallerDataCenterBizListener.invokeOchInfo(OchInfo(0, mutableListOf(start.toMogoLocation(),end.toMogoLocation()))) + } + } } diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/download/DownloadManager.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/download/DownloadManager.kt new file mode 100644 index 0000000000..2520ff1378 --- /dev/null +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/download/DownloadManager.kt @@ -0,0 +1,172 @@ +package com.mogo.och.common.module.manager.download + +import android.annotation.SuppressLint +import android.content.Context +import android.os.Environment +import android.text.TextUtils +import android.util.Log +import com.mogo.commons.AbsMogoApplication +import com.mogo.eagle.core.utilcode.download.DownloadUtils +import com.mogo.eagle.core.utilcode.download.callback.IDownloadListener +import com.mogo.eagle.core.utilcode.util.EncryptUtils +import com.mogo.eagle.core.utilcode.util.RegexUtils +import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager +import com.mogo.och.common.module.manager.loop.BizLoopManager +import com.mogo.och.common.module.manager.loop.LoopInfo +import com.mogo.och.common.module.utils.FileUtils +import io.reactivex.schedulers.Schedulers +import java.io.File + +@SuppressLint("StaticFieldLeak") +object DownloadManager { + + private const val TAG = "DownloadManager" + + private val waitDownLoadList = mutableListOf() + + private val context: Context?=AbsMogoApplication.getApp() + + init { + BizLoopManager.setLoopFunction(TAG, LoopInfo(5*60, ::go2Download, scheduler = Schedulers.io())) + } + + /** + * 获取本地缓存文件的文件全路径 + */ + private fun getFileCacheDir(): String { + // 有些手机需要通过自定义目录 + val relativePath = "mogo" + File.separator + "media" + File.separator + val cacheDir = File(Environment.getExternalStorageDirectory(), relativePath) + if (com.mogo.eagle.core.utilcode.util.FileUtils.createOrExistsDir(cacheDir)) { + return cacheDir.absolutePath + } + + return FileUtils.getCacheDirectory(context, "") + relativePath + } + + /** + * 本地是否已经存在下载完成的文件 + */ + private fun isLocalCacheFileExists(mediaUrl: String): Boolean { + val localVideoCacheFilePath = + getCacheFileFullPathByUrl(mediaUrl) + Log.e(TAG, "文件是否存在,mediaUrl=$mediaUrl------本地文件:${localVideoCacheFilePath}") + return com.mogo.eagle.core.utilcode.util.FileUtils.isFileExists(localVideoCacheFilePath) + } + + /** + * 获取文件缓存的缓存path, 文件名以base64编码避免 中文命名,重复文件名的影响 + */ + private fun getCacheFileFullPathByUrl(mediaUrl: String): String { + return getFileCacheDir() +File.separator +getCacheFileName(mediaUrl) + } + + /** + * 本地缓存文件的文件名,md5编码避免文件名重复或者特殊字符编码问题 + */ + private fun getCacheFileName(mediaUrl: String): String { + val fileSuffix = FileUtils.getExtension(mediaUrl) + if (TextUtils.isEmpty(fileSuffix)) { + Log.e(TAG, "getCacheFileName 根据url获取文件后缀不合法,mediaUrl=$mediaUrl") + return "" + } + return EncryptUtils.encryptMD5ToString(mediaUrl) + FileUtils.EXTENSION_SEPARATOR + fileSuffix + } + + fun clearLocalFile(localVideoPath:String) { + if (com.mogo.eagle.core.utilcode.util.FileUtils.isFileExists(localVideoPath)) { + com.mogo.eagle.core.utilcode.util.FileUtils.delete(localVideoPath) + } + OchChainLogManager.writechainLogDownload("删除本地文件","localVideoPath:${localVideoPath}") + } + + + fun downloadVideoFile(mediaUrl: String, listener: IDownloadListener?) { + if (!RegexUtils.isURL(mediaUrl)) { + OchChainLogManager.writechainLogDownload("准备下载","url 错误 ${mediaUrl}") + return + } + val downloadUrl = mediaUrl + val downloadDir = getFileCacheDir() + val downloadFileName = getCacheFileName(mediaUrl)+"_temp" + + waitDownLoadList.add(OchDownLoad(downloadUrl,downloadDir,downloadFileName,listener)) + + if(waitDownLoadList.size==1){ + go2Download() + } + + } + + private fun go2Download(){ + if(waitDownLoadList.isEmpty()){ + return + } + val first = waitDownLoadList.first() + // 临时文件存在 需要删除重新下载 + if (com.mogo.eagle.core.utilcode.util.FileUtils.isFileExists(first.downloadDir+File.separator+first.downloadFileName)) { + OchChainLogManager.writechainLogDownload("删除临时文件","文件名称:${first.downloadDir+File.separator+first.downloadFileName}") + clearLocalFile(first.downloadDir+File.separator+first.downloadFileName) + } + // 改名后文件存在 不需要下载 + if(isLocalCacheFileExists(first.downloadUrl)){ + if(waitDownLoadList.size>0) { + waitDownLoadList.removeFirst() + } + OchChainLogManager.writechainLogDownload("取消下载文件已存在","信息:${first}") + go2Download() + return + } + OchChainLogManager.writechainLogDownload("准备下载","信息:${first}") + DownloadUtils.downLoad( + context, + first.downloadUrl, + first.downloadDir, + first.downloadFileName, + object :IDownloadListener{ + override fun onStart(url: String) { + OchChainLogManager.writechainLogDownload("开始下载","url:${url}") + first.listener?.onStart(url) + } + + override fun onProgress(url: String, downloaded: Long, total: Long) { + first.listener?.onProgress(url,downloaded,total) + OchChainLogManager.writechainLogDownload("下载中","url:${url}_downloaded${downloaded}_total:${total}",upload = false) + } + + override fun onFinished(url: String, path: String) { + OchChainLogManager.writechainLogDownload("下载成功","url:${url}---path:${path}") + if(waitDownLoadList.size>0) { + waitDownLoadList.removeFirst() + } + if(path.endsWith("_temp")){ + val tempFile = File(path) + val newName = tempFile.name.replace("_temp","") + com.mogo.eagle.core.utilcode.util.FileUtils.rename(tempFile,newName) + first.listener?.onFinished(url,path.replace("_temp","")) + } + go2Download() + } + + override fun onError(url: String, error: String?) { + first.listener?.onError(url,error) + OchChainLogManager.writechainLogDownload("下载错误","url:${url}---error:${error}") + clearLocalFile(first.downloadDir+File.separator+first.downloadFileName) + if(first.downLoadCount>=5){ + OchChainLogManager.writechainLogDownload("下载错误5次可终点关注","url:${url}---error:${error}") + if(waitDownLoadList.size>0) { + waitDownLoadList.removeFirst() + } + go2Download() + return + } + first.downLoadCount++ + go2Download() + } + + } + ) + + + } +} \ No newline at end of file diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/download/OchDownLoad.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/download/OchDownLoad.kt new file mode 100644 index 0000000000..bafaa51092 --- /dev/null +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/download/OchDownLoad.kt @@ -0,0 +1,6 @@ +package com.mogo.och.common.module.manager.download + +import com.mogo.eagle.core.utilcode.download.callback.IDownloadListener +import java.util.UUID + +data class OchDownLoad(val downloadUrl:String, val downloadDir:String, val downloadFileName:String, val listener: IDownloadListener?, var downLoadCount:Int = 0) diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/logchainanalytic/OchChainLogManager.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/logchainanalytic/OchChainLogManager.kt index 28053b9fc4..a62dd8509c 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/logchainanalytic/OchChainLogManager.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/logchainanalytic/OchChainLogManager.kt @@ -33,10 +33,16 @@ object OchChainLogManager { // 网络接口 const val EVENT_KEY_INFO_Net = "event_key_och_net" + + // 下载日志 + const val EVENT_KEY_INFO_Download = "event_key_och_download" + // 初始化信息 const val EVENT_KEY_INFO_INIT = "event_key_och_init" + // 局域网内socket 通讯 const val EVENT_KEY_INFO_SOCKET = "analytics_event_och_track_screen_msg" + // 局域网内socket 连接状态流转 const val EVENT_KEY_INFO_SOCKET_CONNECT = "analytics_event_och_track_screen_connect" @@ -51,19 +57,23 @@ object OchChainLogManager { const val EVENT_KEY_INFO_DB = "analytics_event_och_db" - fun writeChainLogDb( title: String, info: String) { + fun writeChainLogDb(title: String, info: String) { writeChainLog(title, info, true, EVENT_KEY_INFO_DB) } fun writeChainLogNet(mustUpdate: Boolean, title: String, info: String) { - if(mustUpdate){ + if (mustUpdate) { writeChainLog(title, info, true, EVENT_KEY_INFO_Net) - }else { + } else { writeChainLog(title, info, DebugConfig.isDebug(), EVENT_KEY_INFO_Net) } } + fun writechainLogDownload(title: String, info: String,upload: Boolean=true) { + writeChainLog(title, info, upload, EVENT_KEY_INFO_Download) + } + fun writeChainLogScanner(title: String, changeInfo: String) { writeChainLog(title, changeInfo, true, EVENT_KEY_INFO_SCANNER) } diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/BindQRCodeDialogNew.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/BindQRCodeDialogNew.kt new file mode 100644 index 0000000000..0467e3ebeb --- /dev/null +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/BindQRCodeDialogNew.kt @@ -0,0 +1,76 @@ +package com.mogo.och.common.module.wigets + +import android.content.Context +import android.graphics.Bitmap +import androidx.appcompat.widget.AppCompatImageView +import androidx.appcompat.widget.AppCompatTextView +import androidx.lifecycle.LifecycleObserver +import com.mogo.eagle.core.function.hmi.dialog.BaseFloatDialog +import com.mogo.och.common.module.R + +/** + * 带有title, tip,confirm,cancel的dialog + */ +class BindQRCodeDialogNew: BaseFloatDialog, LifecycleObserver { + + private var qrBm : AppCompatImageView? = null + private var qrCancel: AppCompatTextView? = null + private var qrTitle: AppCompatTextView? = null + + private var clickListener: ClickListener? = null + + constructor(builder: Builder,context: Context) : super(context) { + qrTitle?.text = builder.titleStr + qrCancel?.text = builder.cancelStr + qrBm?.setImageBitmap(builder.qrBm) + } + + init{ + setContentView(R.layout.bind_driver_qr_view) + + setCanceledOnTouchOutside(true) + + qrTitle = findViewById(R.id.qr_title) + qrBm = findViewById(R.id.qr_bm) + qrCancel = findViewById(R.id.bind_qr_cancel) + + qrCancel?.setOnClickListener { + clickListener?.cancel() + dismiss() + } + } + + fun setClickListener(clickListener: ClickListener) { + this.clickListener = clickListener + } + + interface ClickListener{ + fun cancel() + } + + class Builder{ + var titleStr:String = "" + var cancelStr:String = "" + var qrBm: Bitmap? = null + + fun title(title: String) : Builder{ + this.titleStr = title + return this + } + + fun cancelStr(cancel: String) : Builder{ + this.cancelStr = cancel + return this + } + + fun qrBm(bm: Bitmap) : Builder{ + this.qrBm = bm + return this + } + + fun build(context: Context): BindQRCodeDialogNew? { + return BindQRCodeDialogNew(this,context) + } + } + +} \ No newline at end of file diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/CommonDialogStatus.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/dialog/CommonDialogStatus.kt similarity index 73% rename from OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/CommonDialogStatus.kt rename to OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/dialog/CommonDialogStatus.kt index db1f17263a..6ef386a438 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/CommonDialogStatus.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/dialog/CommonDialogStatus.kt @@ -1,17 +1,21 @@ -package com.mogo.och.common.module.wigets +package com.mogo.och.common.module.wigets.dialog import android.content.Context +import android.graphics.Color import android.view.View import android.view.animation.Animation import android.view.animation.AnimationUtils import android.view.animation.LinearInterpolator import android.widget.TextView +import androidx.annotation.ColorRes import androidx.appcompat.widget.AppCompatImageView import androidx.appcompat.widget.AppCompatTextView import androidx.lifecycle.LifecycleObserver import com.mogo.eagle.core.function.hmi.dialog.BaseFloatDialog +import com.mogo.eagle.core.utilcode.kotlin.onClick import com.mogo.eagle.core.utilcode.util.UiThreadHandler import com.mogo.och.common.module.R +import com.mogo.och.common.module.utils.ResourcesUtils import io.reactivex.Observable import io.reactivex.disposables.Disposable import io.reactivex.schedulers.Schedulers @@ -28,6 +32,7 @@ class CommonDialogStatus: BaseFloatDialog, LifecycleObserver { private var commonTips : TextView? = null private var countDownTxt: AppCompatTextView? = null private var commonStatus:AppCompatImageView?=null + private var commonClose:AppCompatImageView?=null private var clickListener: ClickListener? = null @@ -35,9 +40,14 @@ class CommonDialogStatus: BaseFloatDialog, LifecycleObserver { private var mCountdownValue: Int = 0 - private var status:Status = Status.ask + private var showCloseView:Boolean = false - constructor(builder: Builder,context: Context) : super(context) { + @ColorRes + private var cancelTextColor:Int = R.color.white + + private var status: Status = Status.ask + + constructor(builder: Builder, context: Context) : super(context) { commonTitle?.text = builder.titleStr commonTips?.text = builder.tipsStr commonCancel?.text = builder.cancelStr @@ -45,6 +55,12 @@ class CommonDialogStatus: BaseFloatDialog, LifecycleObserver { countDownTxt?.text = builder.countDownValue.toString() mCountdownValue = builder.countDownValue status = builder.statusEnum + showCloseView = builder.showClose + cancelTextColor = builder.cancelTextColor + this.clickListener = builder.clickListener + + commonCancel?.setTextColor(ResourcesUtils.getColors(cancelTextColor)) + when (status) { Status.ask -> { commonStatus?.setImageResource(R.drawable.common_dialog_icon_ask) @@ -52,6 +68,9 @@ class CommonDialogStatus: BaseFloatDialog, LifecycleObserver { Status.loading -> { commonStatus?.setImageResource(R.drawable.common_dialog_status_loading) } + Status.success -> { + commonStatus?.setImageResource(R.drawable.common_feedback_success) + } } if (mCountdownValue > 0){ @@ -59,6 +78,9 @@ class CommonDialogStatus: BaseFloatDialog, LifecycleObserver { }else{ countDownTxt?.visibility = View.GONE } + if(showCloseView){ + commonClose?.visibility = View.VISIBLE + } } init{ @@ -72,6 +94,7 @@ class CommonDialogStatus: BaseFloatDialog, LifecycleObserver { commonTips = findViewById(R.id.common_dialog_content_new) countDownTxt = findViewById(R.id.common_count_down_new) commonStatus = findViewById(R.id.common_dialog_status) + commonClose = findViewById(R.id.common_dialog_close) commonConfirm?.setOnClickListener{ clickListener?.confirm() @@ -81,6 +104,10 @@ class CommonDialogStatus: BaseFloatDialog, LifecycleObserver { clickListener?.cancel() dismiss() } + commonClose?.onClick { + clickListener?.dismiss() + dismiss() + } } fun setClickListener(clickListener: ClickListener) { @@ -88,8 +115,9 @@ class CommonDialogStatus: BaseFloatDialog, LifecycleObserver { } interface ClickListener{ - fun confirm() - fun cancel() + fun confirm(){} + fun cancel(){} + fun dismiss(){} } override fun onAttachedToWindow() { @@ -151,35 +179,53 @@ class CommonDialogStatus: BaseFloatDialog, LifecycleObserver { var confirmStr:String = "" var cancelStr:String = "" var countDownValue: Int = 0 + var showClose:Boolean =false + var cancelTextColor:Int = Color.WHITE + var clickListener:ClickListener?=null - fun title(title: String) : Builder{ + fun title(title: String) : Builder { this.titleStr = title return this } - fun tips(tips: String) : Builder{ + fun tips(tips: String) : Builder { this.tipsStr = tips return this } - fun confirmStr(commit: String) : Builder{ + fun confirmStr(commit: String) : Builder { this.confirmStr = commit return this } + fun showClose(show:Boolean):Builder{ + this.showClose = show + return this + } + + fun cancelTextColor(@ColorRes color: Int): Builder { + this.cancelTextColor = color + return this + } + /** * 不传倒计时没有, >0 有倒计时 */ - fun countdownValue(value: Int): Builder{ + fun countdownValue(value: Int): Builder { this.countDownValue = value return this } - fun cancelStr(cancel: String) : Builder{ + fun cancelStr(cancel: String) : Builder { this.cancelStr = cancel return this } + fun clickListener(clickListener: ClickListener): Builder { + this.clickListener = clickListener + return this + } + fun build(context: Context): CommonDialogStatus { return CommonDialogStatus(this,context) } @@ -191,7 +237,7 @@ class CommonDialogStatus: BaseFloatDialog, LifecycleObserver { } enum class Status{ - ask,loading + ask,loading,success } } \ No newline at end of file diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/dialog/CommonFeedbackDialog.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/dialog/CommonFeedbackDialog.kt new file mode 100644 index 0000000000..8ff026fbd6 --- /dev/null +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/dialog/CommonFeedbackDialog.kt @@ -0,0 +1,86 @@ +package com.mogo.och.common.module.wigets.dialog + +import android.content.Context +import android.view.View +import androidx.appcompat.widget.AppCompatImageView +import androidx.appcompat.widget.AppCompatTextView +import androidx.lifecycle.LifecycleObserver +import com.mogo.eagle.core.function.hmi.dialog.BaseFloatDialog +import com.mogo.eagle.core.utilcode.util.ToastUtils +import com.mogo.och.common.module.R +import com.mogo.och.common.module.utils.RxUtils + +/** + * loading + */ +class CommonFeedbackDialog : BaseFloatDialog, LifecycleObserver { + + private var status: Status = Status.success + + private val ivFeedbackStatus:AppCompatImageView by lazy { findViewById(R.id.iv_feedback_status) } + private val tvFeedbackStatusDescribe:AppCompatTextView by lazy { findViewById(R.id.tv_feedback_status_describe) } + + private var listener:Listener?=null + + private var mRunnable:Runnable= Runnable { + ToastUtils.showLong("超时未响应,请求失败") + } + + constructor(builder: Builder, context: Context) : super(context) { + tvFeedbackStatusDescribe.text = builder.titleStr + status = builder.statusEnum + listener = builder.listener + when (status) { + Status.success -> { + ivFeedbackStatus.setImageResource(R.drawable.common_feedback_success) + } + Status.fail -> { + ivFeedbackStatus.setImageResource(R.drawable.common_feedback_fail) + } + } + RxUtils.createSubscribe(1_000) { + hide() + this.listener?.cancel() + } + } + + init { + setContentView(R.layout.common_feedback_dialog) + setCanceledOnTouchOutside(false) + } + + + class Builder{ + var statusEnum: Status = Status.success + var titleStr:String = "" + var listener:Listener?=null + + fun title(title: String) : Builder{ + this.titleStr = title + return this + } + + fun listener(listener: Listener) : Builder{ + this.listener = listener + return this + } + + fun build(context: Context): CommonFeedbackDialog { + return CommonFeedbackDialog(this,context) + } + + fun status(ask: Status): Builder { + this.statusEnum = ask + return this + } + } + + enum class Status{ + success,fail,loading + } + + interface Listener{ + fun cancel() + } + +} \ No newline at end of file diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaBean.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaBean.kt index fc74f766a6..923babdad9 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaBean.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaBean.kt @@ -3,14 +3,24 @@ package com.mogo.och.common.module.wigets.media data class MediaDataList(val medias: MutableList) data class MediaItem( + var priority:Int, var fileUrl: String, var fileType: Int, var coverImageUrl: String, - var title: String + var title: String, + val isTemp:Boolean = false ) { companion object { const val MEDIA_TYPE_IMAGE = 1 const val MEDIA_TYPE_VIDEO = 2 + + const val PriorityConfi = 2 + const val PriorityAd = 1 + const val PrioritySite = 0 + + // 站点优先级 0 + // 广告优先级 1 + // 本地配置是 2 } fun isImageType(): Boolean { @@ -20,4 +30,6 @@ data class MediaItem( fun isVideoType(): Boolean { return this.fileType == MEDIA_TYPE_VIDEO } + + } diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaDataSourceManager.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaDataSourceManager.kt index f429a6fb8e..4bdabb9997 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaDataSourceManager.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaDataSourceManager.kt @@ -6,6 +6,7 @@ import android.text.TextUtils import com.google.gson.reflect.TypeToken import com.mogo.commons.AbsMogoApplication import com.mogo.commons.debug.DebugConfig +import com.mogo.commons.env.ProjectUtils import com.mogo.eagle.core.data.BaseData import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager @@ -73,9 +74,8 @@ object MediaDataSourceManager { if (!mMediaDataSourceListenerMap.containsKey(tag)) { mMediaDataSourceListenerMap[tag] = dataSourceListener } - val isSassProject = isSassProject() - MediaPlayLogger.printInfoLog("init, 初始化环境 isSassProject=$isSassProject") - if (isSassProject) { + MediaPlayLogger.printInfoLog("init, 初始化环境 isSassProject=${ProjectUtils.isSaas()}") + if (ProjectUtils.isSaas()) { mNetworkService = MoGoRetrofitFactory.getInstance(OchCommonConst.getEagleMisUrl()).create(IMediaNetworkApi::class.java) MediaPlayLogger.printInfoLog("init, 开始检查后台配置数据") startGetMediaDataSourceLoop() @@ -265,6 +265,7 @@ data class MediaDataResp(val data: List) : BaseData() { val rotationItemList = mutableListOf() mediaDataList?.forEach { val rotationItem = MediaItem( + priority = MediaItem.PriorityAd, fileUrl = if (TextUtils.isEmpty(it.file_path)) "" else "${it.file_path}", fileType = if (it.file_type == 1) MEDIA_TYPE_VIDEO else MEDIA_TYPE_IMAGE, coverImageUrl = if (TextUtils.isEmpty(it.cover_path)) "" else "${it.cover_path}", diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaFileCacheManager.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaFileCacheManager.kt index 259e1daaae..16506e7f89 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaFileCacheManager.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaFileCacheManager.kt @@ -7,6 +7,7 @@ import android.util.Log import com.mogo.eagle.core.utilcode.download.DownloadUtils import com.mogo.eagle.core.utilcode.download.callback.IDownloadListener import com.mogo.eagle.core.utilcode.util.EncryptUtils +import com.mogo.och.common.module.manager.download.DownloadManager import com.mogo.och.common.module.utils.FileUtils import java.io.File @@ -58,7 +59,7 @@ object MediaFileCacheManager { * 获取文件缓存的缓存path, 文件名以base64编码避免 中文命名,重复文件名的影响 */ fun getCacheFileFullPathByUrl(context: Context, mediaUrl: String): String { - return getFileCacheDir(context) + getCacheFileName(mediaUrl) + return getFileCacheDir(context) +File.separator +getCacheFileName(mediaUrl) } /** @@ -67,22 +68,14 @@ object MediaFileCacheManager { fun isLocalCacheFileExists(context: Context, mediaUrl: String): Boolean { val localVideoCacheFilePath = getCacheFileFullPathByUrl(context, mediaUrl) + Log.e(TAG, "文件是否存在,mediaUrl=$mediaUrl------本地文件:${localVideoCacheFilePath}") return com.mogo.eagle.core.utilcode.util.FileUtils.isFileExists(localVideoCacheFilePath) } /** * 下载文件 */ - fun downloadFile(context: Context, mediaUrl: String, listener: IDownloadListener) { - val downloadUrl = mediaUrl - val downloadDir = getFileCacheDir(context) - val downloadFileName = getCacheFileName(mediaUrl) - DownloadUtils.downLoad( - context, - downloadUrl, - downloadDir, - downloadFileName, - listener - ) + fun downloadFile(mediaUrl: String, listener: IDownloadListener) { + DownloadManager.downloadVideoFile(mediaUrl,listener) } } \ No newline at end of file diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaLoopPlayView.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaLoopPlayView.kt index af68e0398b..2d508bd2a4 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaLoopPlayView.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaLoopPlayView.kt @@ -14,6 +14,7 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.util.CountDownTimer import com.mogo.eagle.core.utilcode.util.ToastUtils import com.mogo.och.common.module.wigets.media.MediaLoopPlayView.Companion.IMAGE_COUNT_DOWN_SECONDS +import com.mogo.och.common.module.wigets.media.MediaLoopPlayView.Companion.TAG import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack class MediaLoopPlayView @JvmOverloads constructor( @@ -47,6 +48,10 @@ class MediaLoopPlayView @JvmOverloads constructor( pagerAdapter?.setNewMediaData(list) } + fun setsetHightPriorityMediaItem(list: MutableList){ + pagerAdapter?.setSiteInfortion(list) + } + fun setPause() { pagerAdapter?.setPause() } @@ -81,6 +86,8 @@ class AdvancePagerAdapter(context: Context, viewPager: ViewPager) : PagerAdapter //新的数据,在轮播下一次切换的时机完成整体数据的更新 private val mNewDataList: MutableList = mutableListOf() + private var hightPriorityMediaItem: MutableList = mutableListOf() + private var mLastViewPagerPosition = -1 private var mImageCountDownTimer: CountDownTimer? = null @@ -111,6 +118,14 @@ class AdvancePagerAdapter(context: Context, viewPager: ViewPager) : PagerAdapter mNewDataList.addAll(list) } + fun setSiteInfortion(list: MutableList){ + hightPriorityMediaItem = list + if(list.isEmpty()){ + return + } + startPlayHightPriorityMediaItem(false,1) + } + override fun getCount(): Int { return mDataList.size } @@ -144,7 +159,7 @@ class AdvancePagerAdapter(context: Context, viewPager: ViewPager) : PagerAdapter mItemViewList.add(imageView) } else if (item.isVideoType()) { val videoView = AdvanceVideoView(mContext) - videoView.initVideoUrlData(item.fileUrl, item.coverImageUrl) + videoView.initVideoUrlData(item.fileUrl, item.coverImageUrl,item.priority,item.isTemp) mItemViewList.add(videoView) } else { MediaPlayLogger.printErrorLog( "addItemView 不支持的文件类型:${item.fileType}") @@ -174,6 +189,125 @@ class AdvancePagerAdapter(context: Context, viewPager: ViewPager) : PagerAdapter } } + private fun startPlayHightPriorityMediaItem(isOnVideoError:Boolean,who:Int){ + CallerLogger.d(TAG,"检测播放站点介绍:$who") + val currentPosition = mViewPager.currentItem + if(mItemViewList.isEmpty()){ + CallerLogger.d(TAG,"view 没有初始化") + return + } + if(hightPriorityMediaItem.size<1){ + CallerLogger.d(TAG,"站点视频播放结束没有了") + val currentMediaItem = mDataList[currentPosition] + // 恢复数据 重新播放 + when (val itemView = mItemViewList[currentPosition]) { + is AdvanceVideoView -> { + if(itemView.isTempPlayer){ + CallerLogger.d(TAG,"删除临时view 和data") + mItemViewList.remove(itemView) + var tempDeleteItem:MediaItem?=null + mDataList.forEach { + if(it.isTemp){ + tempDeleteItem = it + } + } + mDataList.remove(tempDeleteItem) + notifyDataSetChanged() + mViewPager.currentItem = 0 + mViewPager.setCurrentItem(0, true) + return + } + CallerLogger.d(TAG,"恢复原有视频播放信息${currentMediaItem}") + itemView.onVideoReset() + if (isOnVideoError) { + // 删除上一个缓存的视频 + itemView.clearLocalErrorVideo() + } + itemView.initVideoUrlData(currentMediaItem.fileUrl,currentMediaItem.coverImageUrl,currentMediaItem.priority) + itemView.setThumbImageViewVisible() + itemView.startPlayVideo(videoPlayLifecycleCallBack) + } + } + // 播放完高优视频 + startLoopPlay() + return + } + val currentMediaItem = hightPriorityMediaItem.first() + when (val itemView = mItemViewList[currentPosition]) { + // 当前正在播放视频 + is AdvanceVideoView -> { + MediaPlayLogger.printInfoLog("startPlayHightPriorityMediaItem: AdvanceVideoView, url=${currentMediaItem.fileUrl}") + itemView.onVideoReset() + if (isOnVideoError) { + // 删除上一个缓存的视频 + itemView.clearLocalErrorVideo() + } + itemView.initVideoUrlData(currentMediaItem.fileUrl,currentMediaItem.coverImageUrl,currentMediaItem.priority) + itemView.setThumbImageViewVisible() + itemView.startPlayVideo(hightPriorityVideoPlayLifecycleCallBack) + if(hightPriorityMediaItem.size>0) { + hightPriorityMediaItem.removeFirst() + } + } + // 当前正在播放图片 + is AdvanceImageView -> { + // 正在播放图片 + MediaPlayLogger.printInfoLog("startPlayHightPriorityMediaItem: AdvanceImageView, url=${currentMediaItem.fileUrl}") + // 停止倒计时 + cancelImageCountDownTimer() + // 寻找 视频Item + mDataList.forEachIndexed { index, mediaItem -> + // 广告中有视频播放器 + if(mediaItem.fileType==MediaItem.MEDIA_TYPE_VIDEO){ + mViewPager.post { + mViewPager.currentItem = index + mViewPager.setCurrentItem(index, true) + } + return + } + } + CallerLogger.d(TAG,"没有视频VIew 创建临时View 和data") + // 当前播放列表中没有视频 + // TODO: 创建临时view去播放视频 + val mediaItem = MediaItem( + MediaItem.PrioritySite, + currentMediaItem.fileUrl, + MediaItem.MEDIA_TYPE_VIDEO, + "", + "", + true + ) + mDataList.add(mediaItem) + addItemView(mediaItem) + notifyDataSetChanged() + mViewPager.currentItem = mItemViewList.size-1 + mViewPager.setCurrentItem(mItemViewList.size-1, true) + } + + else -> { + MediaPlayLogger.printErrorLog("startLoopPlay 不支持的文件类型:${currentMediaItem.fileType}, url=${currentMediaItem.fileUrl}") + } + } + } + + private var hightPriorityVideoPlayLifecycleCallBack = object : GSYSampleCallBack() { + + override fun onPrepared(url: String?, vararg objects: Any?) { + CallerLogger.d(MediaLoopPlayView.TAG, "onPrepared") + } + + override fun onAutoComplete(url: String?, vararg objects: Any?) { + CallerLogger.d(MediaLoopPlayView.TAG, "onAutoComplete") + startPlayHightPriorityMediaItem(false,3) + } + + override fun onPlayError(url: String?, vararg objects: Any?) { + super.onPlayError(url, *objects) + CallerLogger.d(MediaLoopPlayView.TAG, "onPlayError, error=${objects}") + startPlayHightPriorityMediaItem(true,4) + } + } + private var videoPlayLifecycleCallBack = object : GSYSampleCallBack() { override fun onPrepared(url: String?, vararg objects: Any?) { @@ -245,7 +379,8 @@ class AdvancePagerAdapter(context: Context, viewPager: ViewPager) : PagerAdapter currentItemView.clearLocalErrorVideo() } if (mItemViewList.size == 1) { - currentItemView.startPlay(currentMediaItem.fileUrl) + currentItemView.initVideoUrlData(currentMediaItem.fileUrl,currentMediaItem.coverImageUrl,currentMediaItem.priority) + currentItemView.startPlayVideo(videoPlayLifecycleCallBack) return } } @@ -303,7 +438,11 @@ class AdvancePagerAdapter(context: Context, viewPager: ViewPager) : PagerAdapter "onPageScrollStateChanged, state = $state, currentItem = $currentPosition, lastPosition = $mLastViewPagerPosition" ) if (mItemViewList.size > 1) { //多于1,才会循环跳转 - startLoopPlay() + if(hightPriorityMediaItem.size>0){ + startPlayHightPriorityMediaItem(false,5) + }else { + startLoopPlay() + } mLastViewPagerPosition = currentPosition } } diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaPlayerCustomView.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaPlayerCustomView.kt index 1dd3ad07af..419fc4b515 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaPlayerCustomView.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaPlayerCustomView.kt @@ -15,6 +15,7 @@ import com.mogo.eagle.core.utilcode.util.UiThreadHandler import com.mogo.eagle.core.widget.media.video.TextureVideoViewOutlineProvider import com.mogo.och.common.module.R import com.mogo.och.common.module.wigets.media.MediaFileCacheManager +import com.mogo.och.common.module.wigets.media.MediaItem import com.mogo.och.common.module.wigets.media.MediaLoopPlayView import com.mogo.och.common.module.wigets.media.MediaPlayLogger import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder @@ -37,6 +38,9 @@ class AdvanceVideoView @JvmOverloads constructor( private var thumbnailImageUrl: String = "" private var videoUrl: String = "" + private var priority:Int = MediaItem.PrioritySite + var isTempPlayer = false + private set private val downListener = object : IDownloadListener { override fun onStart(url: String) { @@ -61,7 +65,9 @@ class AdvanceVideoView @JvmOverloads constructor( if (url == videoUrl) { //下载完成 ThreadUtils.runOnUiThread { - startPlay(Uri.fromFile(File(path)).toString()) + if(priority!=MediaItem.PrioritySite) { + startPlay(Uri.fromFile(File(path)).toString()) + } } MediaPlayLogger.printInfoLog("download finished, 开始播放,downloadUrl=${videoUrl}") } else {//如果当前文件不存在再次去下载当前的 @@ -72,7 +78,9 @@ class AdvanceVideoView @JvmOverloads constructor( if (FileUtils.isFileExists(path)) { Logger.d(MediaLoopPlayView.TAG, "video play download, had download, startPlay") ThreadUtils.runOnUiThread { - startPlay(Uri.fromFile(File(path)).toString()) + if(priority!=MediaItem.PrioritySite) { + startPlay(Uri.fromFile(File(path)).toString()) + } } MediaPlayLogger.printInfoLog("download finished, 开始播放,downloadUrl=${videoUrl}") } else { @@ -116,14 +124,20 @@ class AdvanceVideoView @JvmOverloads constructor( containerLayout?.addView(videoPlayerView, videoPlayerViewLayoutParams) } + fun initVideoUrlData(videoUrl: String, thumbnailImageUrl: String,priority:Int,isTempPlayer:Boolean = false) { + this.isTempPlayer = isTempPlayer + initVideoUrlData(videoUrl,thumbnailImageUrl,priority) + } + /** * 初始化数据 */ - fun initVideoUrlData(videoUrl: String, thumbnailImageUrl: String) { + fun initVideoUrlData(videoUrl: String, thumbnailImageUrl: String,priority:Int) { // https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357834634/5.m4v // https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360274126/10.mp4 this.videoUrl = videoUrl this.thumbnailImageUrl = thumbnailImageUrl + this.priority = priority } /** @@ -132,6 +146,19 @@ class AdvanceVideoView @JvmOverloads constructor( fun startPlayVideo(onCompletionListener: GSYSampleCallBack) { //首先根据url检查video是否有已经下载完的本地视频文件 gsyVideoPlayerLifecycleCallback = onCompletionListener + videoPlayerView?.thumbImageView = thumbnailImageView + thumbnailImageView?.setImageResource(R.drawable.video_holder) + thumbnailImageView?.also { + Glide.with(context).asBitmap().load(thumbnailImageUrl) + .apply( + RequestOptions().useUnlimitedSourceGeneratorsPool(true) + .placeholder(R.drawable.video_holder) + .error(R.drawable.video_holder) + .fallback(R.drawable.video_holder) + .centerCrop() + ) + .into(it) + } if (MediaFileCacheManager.isLocalCacheFileExists(context, this.videoUrl)) { val localVideoCacheFilePath = MediaFileCacheManager.getCacheFileFullPathByUrl( context, this.videoUrl @@ -144,19 +171,6 @@ class AdvanceVideoView @JvmOverloads constructor( MediaLoopPlayView.TAG, "播放视频,videoUri=$realUri" ) } else { - thumbnailImageView?.setImageResource(R.drawable.video_holder) - videoPlayerView?.thumbImageView = thumbnailImageView - thumbnailImageView?.also { - Glide.with(context).asBitmap().load(thumbnailImageUrl) - .apply( - RequestOptions().useUnlimitedSourceGeneratorsPool(true) - .placeholder(R.drawable.video_holder) - .error(R.drawable.video_holder) - .fallback(R.drawable.video_holder) - .centerCrop() - ) - .into(it) - } setThumbImageViewVisible() startDownLoadVideoFile() @@ -179,11 +193,7 @@ class AdvanceVideoView @JvmOverloads constructor( private fun startDownLoadVideoFile() { //下载视频,下载成功后再播放 MediaPlayLogger.printInfoLog( "startDownLoadVideoFile, downloadUrl=${this.videoUrl}") - MediaFileCacheManager.downloadFile( - context, - videoUrl, - downListener - ) + MediaFileCacheManager.downloadFile(videoUrl, downListener) } fun clearLocalErrorVideo() { @@ -199,7 +209,7 @@ class AdvanceVideoView @JvmOverloads constructor( Logger.d(MediaLoopPlayView.TAG, "startPlay") gsyVideoPlayerOptionBuilder = GSYVideoOptionBuilder() gsyVideoPlayerOptionBuilder - ?.setUrl(localVideoPath) // "/data/user/0/com.mogo.launcher.f/files/video/" + ?.setUrl(localVideoPath) // "/sdcard/mogo/media" ?.setPlayTag(MediaFileCacheManager.getCacheFileName(videoUrl)) ?.setCacheWithPlay(false) ?.setThumbPlay(false) diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaPlayerFragment.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaPlayerFragment.kt index 4489566f02..0c3ba2dc4f 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaPlayerFragment.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaPlayerFragment.kt @@ -3,11 +3,19 @@ package com.mogo.och.common.module.wigets.media import com.mogo.commons.mvp.MvpFragment import com.mogo.commons.mvp.Presenter import com.mogo.eagle.core.function.main.MainMoGoApplication +import com.mogo.eagle.core.utilcode.kotlin.onClick import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.util.GsonUtils +import com.mogo.eagle.core.utilcode.util.ThreadUtils import com.mogo.eagle.core.utilcode.util.UiThreadHandler import com.mogo.och.common.module.R +import com.mogo.och.common.module.biz.media.IMediaDispatch +import com.mogo.och.common.module.biz.media.MediaManager +import com.mogo.och.common.module.manager.download.DownloadManager +import com.mogo.och.common.module.utils.RxUtils import com.shuyu.gsyvideoplayer.GSYVideoManager +import io.reactivex.disposables.Disposable +import kotlinx.android.synthetic.main.fragment_video_player.acb_add_site_video import kotlinx.android.synthetic.main.fragment_video_player.imageVideoRotationView /** @@ -15,7 +23,7 @@ import kotlinx.android.synthetic.main.fragment_video_player.imageVideoRotationVi * @date: 2022/4/12 */ class MediaPlayerFragment : - MvpFragment() { + MvpFragment(), IMediaDispatch { companion object { private val TAG = MediaPlayerFragment::class.java.simpleName @@ -36,6 +44,13 @@ class MediaPlayerFragment : } override fun initViews() { + acb_add_site_video.onClick { + val siteList = mutableListOf() +// siteList.add(MediaItem(MediaItem.PrioritySite,"https://img.zhidaozhixing.com/fileServer/defaultPath/b47f361c3de6ea490f3086407fc0376f/a1%E8%B7%AF%E7%BA%BF%281%29.mp4",MediaItem.MEDIA_TYPE_VIDEO,"","title")) + siteList.add(MediaItem(MediaItem.PrioritySite,"https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357557335/3.mp4",MediaItem.MEDIA_TYPE_VIDEO,"","title")) + setHightPriorityMediaItem(siteList) + } + MediaManager.addListener(TAG,this) MediaFileCacheManager.createFileCacheDir(MainMoGoApplication.getApp().applicationContext) MediaDataSourceManager.init(TAG, object : IMediaDataSourceListener { override fun onMediaDataSourceChanged(list: List) { @@ -56,6 +71,22 @@ class MediaPlayerFragment : }) } + fun setHightPriorityMediaItem(list: MutableList){ + context?.let {context-> + val cacheList = list.filter { + if(!MediaFileCacheManager.isLocalCacheFileExists(context,it.fileUrl)){ + DownloadManager.downloadVideoFile(it.fileUrl,null) + } + MediaFileCacheManager.isLocalCacheFileExists(context,it.fileUrl) + } + ThreadUtils.runOnUiThread { + imageVideoRotationView.setsetHightPriorityMediaItem(cacheList.toMutableList()) + } + } + + + } + override fun onPause() { super.onPause() imageVideoRotationView.setPause() @@ -69,8 +100,19 @@ class MediaPlayerFragment : override fun onDestroy() { MediaDataSourceManager.unInit(TAG) GSYVideoManager.releaseAllVideos() + MediaManager.removeListener(TAG) super.onDestroy() } + + private var fisrtData: Disposable? = null + + override fun diapatchMedia(list: MutableList) { + if(RxUtils.isNotDisposed(fisrtData)){ + return + } + fisrtData = RxUtils.createSubscribe(3_000) {} + setHightPriorityMediaItem(list) + } } class MediaPlayerPresenter(view: MediaPlayerFragment?) : diff --git a/OCH/common/common/src/main/res/drawable-nodpi/common_dialog_close.png b/OCH/common/common/src/main/res/drawable-nodpi/common_dialog_close.png new file mode 100755 index 0000000000..7fa6d7c9aa Binary files /dev/null and b/OCH/common/common/src/main/res/drawable-nodpi/common_dialog_close.png differ diff --git a/OCH/common/common/src/main/res/drawable-nodpi/common_feedback_fail.png b/OCH/common/common/src/main/res/drawable-nodpi/common_feedback_fail.png new file mode 100755 index 0000000000..e25e6c9007 Binary files /dev/null and b/OCH/common/common/src/main/res/drawable-nodpi/common_feedback_fail.png differ diff --git a/OCH/common/common/src/main/res/drawable-nodpi/common_feedback_success.png b/OCH/common/common/src/main/res/drawable-nodpi/common_feedback_success.png new file mode 100755 index 0000000000..ed9494988a Binary files /dev/null and b/OCH/common/common/src/main/res/drawable-nodpi/common_feedback_success.png differ diff --git a/OCH/common/common/src/main/res/drawable/common_button_cancle.xml b/OCH/common/common/src/main/res/drawable/common_button_cancle.xml new file mode 100644 index 0000000000..7e6761c41a --- /dev/null +++ b/OCH/common/common/src/main/res/drawable/common_button_cancle.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/OCH/common/common/src/main/res/drawable/common_button_cancle_click.xml b/OCH/common/common/src/main/res/drawable/common_button_cancle_click.xml new file mode 100644 index 0000000000..65e7156a99 --- /dev/null +++ b/OCH/common/common/src/main/res/drawable/common_button_cancle_click.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/OCH/common/common/src/main/res/drawable/common_button_cancle_normal.xml b/OCH/common/common/src/main/res/drawable/common_button_cancle_normal.xml new file mode 100644 index 0000000000..e3628c0304 --- /dev/null +++ b/OCH/common/common/src/main/res/drawable/common_button_cancle_normal.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/OCH/common/common/src/main/res/drawable/common_qr_dialog.xml b/OCH/common/common/src/main/res/drawable/common_qr_dialog.xml new file mode 100644 index 0000000000..f38d14079c --- /dev/null +++ b/OCH/common/common/src/main/res/drawable/common_qr_dialog.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/OCH/common/common/src/main/res/layout/bind_driver_qr_view.xml b/OCH/common/common/src/main/res/layout/bind_driver_qr_view.xml index 4707e43487..c3cd9cbfec 100644 --- a/OCH/common/common/src/main/res/layout/bind_driver_qr_view.xml +++ b/OCH/common/common/src/main/res/layout/bind_driver_qr_view.xml @@ -1,20 +1,21 @@ - + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="@dimen/dp_900" + android:layout_height="@dimen/dp_745" + android:background="@drawable/common_qr_dialog" + app:roundLayoutRadius="@dimen/dp_50"> - - + app:layout_constraintBottom_toTopOf="@+id/bind_qr_cancel"/> - \ No newline at end of file + \ No newline at end of file diff --git a/OCH/common/common/src/main/res/layout/common_dialog_status_new.xml b/OCH/common/common/src/main/res/layout/common_dialog_status_new.xml index 0e099aed47..7b607f953b 100644 --- a/OCH/common/common/src/main/res/layout/common_dialog_status_new.xml +++ b/OCH/common/common/src/main/res/layout/common_dialog_status_new.xml @@ -8,6 +8,16 @@ android:background="@drawable/bg_bone_dialog" app:roundLayoutRadius="@dimen/dp_50"> + + + + + + + + \ No newline at end of file diff --git a/OCH/common/common/src/main/res/layout/fragment_video_player.xml b/OCH/common/common/src/main/res/layout/fragment_video_player.xml index 8b12b3606c..becec91ba9 100644 --- a/OCH/common/common/src/main/res/layout/fragment_video_player.xml +++ b/OCH/common/common/src/main/res/layout/fragment_video_player.xml @@ -1,10 +1,21 @@ + android:layout_height="match_parent" + xmlns:app="http://schemas.android.com/apk/res-auto"> + + \ No newline at end of file diff --git a/OCH/common/common/src/main/res/values/colors.xml b/OCH/common/common/src/main/res/values/colors.xml index 4bdbaf74bf..00049527b7 100644 --- a/OCH/common/common/src/main/res/values/colors.xml +++ b/OCH/common/common/src/main/res/values/colors.xml @@ -8,7 +8,8 @@ #111533 #878890 #EF262C - #4D000000 + #4D000000 + #99000000 #3B4577 @@ -35,4 +36,6 @@ #B3FFFFFF #CCCCCC #F7151D41 + #3B3D44 + #2E323A \ No newline at end of file diff --git a/OCH/common/common/src/main/res/values/strings.xml b/OCH/common/common/src/main/res/values/strings.xml index 61afbce149..4733549483 100644 --- a/OCH/common/common/src/main/res/values/strings.xml +++ b/OCH/common/common/src/main/res/values/strings.xml @@ -25,7 +25,7 @@ 请求出现异常,请稍后重试 取消 - 扫描二维码完成车辆绑定 + 请扫码绑定 自动驾驶已退出,请立即接管,注意周边环境 小心驾驶 平行驾驶已退出,请立即接管,注意周边环境 小心驾驶 diff --git a/OCH/common/data/src/main/java/com/mogo/och/data/bean/BusStationBean.java b/OCH/common/data/src/main/java/com/mogo/och/data/bean/BusStationBean.java index 2d40aeaf63..9d3d67b970 100644 --- a/OCH/common/data/src/main/java/com/mogo/och/data/bean/BusStationBean.java +++ b/OCH/common/data/src/main/java/com/mogo/och/data/bean/BusStationBean.java @@ -1,5 +1,10 @@ package com.mogo.och.data.bean; +import com.mogo.eagle.core.data.map.MogoLocation; + +import org.jetbrains.annotations.NotNull; + +import java.util.List; import java.util.Objects; /** @@ -21,6 +26,7 @@ public class BusStationBean { private String introduction;// 站点简介 private boolean isPlayTts; private int pointType; // 1:途径点 2:禁行点 3:站点 + private List videoList; public String getNameKr() { return nameKr; @@ -118,6 +124,14 @@ public class BusStationBean { isPlayTts = playTts; } + public List getVideoList() { + return videoList; + } + + public void setVideoList(List videoList) { + this.videoList = videoList; + } + public int getPointType() { return pointType; } @@ -130,23 +144,40 @@ public class BusStationBean { public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; + BusStationBean that = (BusStationBean) o; return siteId == that.siteId && seq == that.seq - && Double.compare(that.gcjLon, gcjLon) == 0 - && Double.compare(that.gcjLat, gcjLat) == 0 - && Double.compare(that.lon, lon) == 0 - && Double.compare(that.lat, lat) == 0 + && Double.compare(gcjLon, that.gcjLon) == 0 + && Double.compare(gcjLat, that.gcjLat) == 0 + && Double.compare(lon, that.lon) == 0 + && Double.compare(lat, that.lat) == 0 && drivingStatus == that.drivingStatus - && leaving == that.leaving + && leaving == that.leaving && isPlayTts == that.isPlayTts && pointType == that.pointType - && name.equals(that.name) - && (nameKr == null || nameKr.equals(that.nameKr)); + && Objects.equals(name, that.name) + && Objects.equals(nameKr, that.nameKr) + && Objects.equals(introduction, that.introduction) + && Objects.equals(videoList, that.videoList); } @Override public int hashCode() { - return Objects.hash(siteId, name, nameKr, seq, gcjLon, gcjLat, lon, lat, drivingStatus, leaving,pointType); + int result = siteId; + result = 31 * result + Objects.hashCode(name); + result = 31 * result + Objects.hashCode(nameKr); + result = 31 * result + seq; + result = 31 * result + Double.hashCode(gcjLon); + result = 31 * result + Double.hashCode(gcjLat); + result = 31 * result + Double.hashCode(lon); + result = 31 * result + Double.hashCode(lat); + result = 31 * result + drivingStatus; + result = 31 * result + Boolean.hashCode(leaving); + result = 31 * result + Objects.hashCode(introduction); + result = 31 * result + Boolean.hashCode(isPlayTts); + result = 31 * result + pointType; + result = 31 * result + Objects.hashCode(videoList); + return result; } @Override @@ -165,6 +196,15 @@ public class BusStationBean { ", introduction='" + introduction + '\'' + ", isPlayTts=" + isPlayTts + ", pointType=" + pointType + + ", videoList=" + videoList + '}'; } + + @NotNull + public MogoLocation toMogoLocation() { + MogoLocation result = new MogoLocation(); + result.setLatitude(gcjLat); + result.setLongitude(gcjLon); + return result; + } } diff --git a/OCH/common/data/src/main/java/com/mogo/och/data/bean/SiteIntroduce.java b/OCH/common/data/src/main/java/com/mogo/och/data/bean/SiteIntroduce.java new file mode 100644 index 0000000000..375769d687 --- /dev/null +++ b/OCH/common/data/src/main/java/com/mogo/och/data/bean/SiteIntroduce.java @@ -0,0 +1,59 @@ +package com.mogo.och.data.bean; + +import java.util.Objects; + +public class SiteIntroduce { + private int type; + private String url; + private int seq; + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public int getSeq() { + return seq; + } + + public void setSeq(int seq) { + this.seq = seq; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + SiteIntroduce that = (SiteIntroduce) o; + return type == that.type && seq == that.seq && Objects.equals(url, that.url); + } + + @Override + public int hashCode() { + int result = type; + result = 31 * result + Objects.hashCode(url); + result = 31 * result + seq; + return result; + } + + @Override + public String toString() { + return "SiteIntroduce{" + + "type=" + type + + ", url='" + url + '\'' + + ", seq=" + seq + + '}'; + } +} diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ShuttleDriverProvider.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ShuttleDriverProvider.kt index a802af293e..5127f2006a 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ShuttleDriverProvider.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ShuttleDriverProvider.kt @@ -4,6 +4,7 @@ import android.content.Context import android.view.View import androidx.fragment.app.Fragment import com.alibaba.android.arouter.facade.annotation.Route +import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant import com.mogo.eagle.core.utilcode.util.ThreadUtils @@ -17,6 +18,7 @@ import com.mogo.och.weaknet.repository.db.repository.TaskSiteDb import com.mogo.och.weaknet.ui.fragment.ShuttleFragment import com.mogo.och.weaknet.model.LineModel import com.mogo.och.weaknet.ui.bizswitch.SwitchBizView +import com.mogo.och.weaknet.ui.qr.QrOpenView import com.mogo.och.weaknet.util.BusAnalyticsManager /** @@ -60,4 +62,13 @@ class ShuttleDriverProvider : CommonServiceImpl() { SwitchBizView(it) } } + + override fun createOchBindQRCodeView(context: Context?): View? { + if (FunctionBuildConfig.urlJson.bindDriverQRUrl.isNullOrEmpty()) { + return null + } + return context?.let { + QrOpenView(it) + } + } } diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/fragment/ShuttleFragment.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/fragment/ShuttleFragment.kt index 6d17b7b89b..041c1c03fc 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/fragment/ShuttleFragment.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/fragment/ShuttleFragment.kt @@ -137,27 +137,7 @@ class ShuttleFragment : MvpFragment() { fun changeOverview(eventLogout: EventLogout) { when (eventLogout.messgae) { EventLogout.SHOW_QR_TYPE-> { //显示二维码 - d( - SceneConstant.M_BUS + TAG, "changeOverview Event qrcode,sn = " - + SharedPrefsMgr.getInstance().sn - ) - val qrUrl = String.format( - FunctionBuildConfig.urlJson.bindDriverQRUrl, - SharedPrefsMgr.getInstance().sn - ) - val bmQr = createQRCodeWithPicture( - BitmapFactory.decodeResource(resources, R.drawable.icon_qr_center_logo), - qrUrl, AutoSizeUtils.dp2px(context, 340f), - AutoSizeUtils.dp2px(context, 340f), true - ) - if (bmQr != null) { - val builder = BindQRCodeDialog.Builder() - builder.title(getString(R.string.bind_driver_qr_title)) - .cancelStr(getString(R.string.qr_cancel)) - .qrBm(bmQr).build(AbsMogoApplication.getApp())!!.show() - } else { - d(SceneConstant.M_BUS + TAG, "bmQr = null ") - } + } EventLogout.SHOW_WAIT_UPLOAD_TASK-> { context?.let { diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/qr/QrOpenView.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/qr/QrOpenView.kt new file mode 100644 index 0000000000..eb05aa272e --- /dev/null +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/qr/QrOpenView.kt @@ -0,0 +1,75 @@ +package com.mogo.och.weaknet.ui.qr + +import android.content.Context +import android.graphics.BitmapFactory +import android.util.AttributeSet +import androidx.appcompat.widget.AppCompatImageView +import com.mogo.commons.AbsMogoApplication +import com.mogo.commons.storage.SharedPrefsMgr +import com.mogo.eagle.core.data.config.FunctionBuildConfig +import com.mogo.eagle.core.utilcode.kotlin.onClick +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant +import com.mogo.och.common.module.utils.ResourcesUtils +import com.mogo.och.common.module.utils.createQRCodeWithPicture +import com.mogo.och.common.module.wigets.BindQRCodeDialog +import com.mogo.och.shuttle.weaknet.R +import me.jessyan.autosize.utils.AutoSizeUtils + +class QrOpenView : AppCompatImageView { + + private val TAG = "QrOpenView" + + constructor(context: Context) : super(context) + + constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet) + + constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int) : super( + context, + attributeSet, + defStyleAttr + ) + + private fun initView() { + setImageResource(R.drawable.bus_open_qr) + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + + onClick { + d( + SceneConstant.M_BUS + TAG, "changeOverview Event qrcode,sn = " + + SharedPrefsMgr.getInstance().sn + ) + val qrUrl = String.format( + FunctionBuildConfig.urlJson.bindDriverQRUrl, + SharedPrefsMgr.getInstance().sn + ) + val bmQr = createQRCodeWithPicture( + BitmapFactory.decodeResource(resources, R.drawable.icon_qr_center_logo), + qrUrl, AutoSizeUtils.dp2px(context, 340f), + AutoSizeUtils.dp2px(context, 340f), true + ) + if (bmQr != null) { + val builder = BindQRCodeDialog.Builder() + builder.title(ResourcesUtils.getString(R.string.bind_driver_qr_title)) + .cancelStr(ResourcesUtils.getString(R.string.qr_cancel)) + .qrBm(bmQr).build(AbsMogoApplication.getApp())!!.show() + } else { + d(SceneConstant.M_BUS + TAG, "bmQr = null ") + } + } + } + + + init { + try { + initView() + } catch (e: Exception) { + e.printStackTrace() + } + } + + +} \ No newline at end of file diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchline/SwitchLineAdapter.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchline/SwitchLineAdapter.kt index f385ba5736..d1b340a761 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchline/SwitchLineAdapter.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchline/SwitchLineAdapter.kt @@ -12,6 +12,7 @@ import com.mogo.och.weaknet.ui.switchline.SwitchLineAdapter.SwitchLineViewHolder import com.mogo.och.shuttle.weaknet.R import com.mogo.och.weaknet.repository.db.bean.LineDataBean import com.mogo.och.weaknet.repository.db.bean.TaskDataBean +import me.jessyan.autosize.AutoSizeCompat /** * 路线列表adapter @@ -50,6 +51,7 @@ class SwitchLineAdapter( override fun onBindViewHolder(holder: SwitchLineViewHolder, position: Int) { val currentPosition = holder.bindingAdapterPosition + AutoSizeCompat.autoConvertDensityOfGlobal(holder.itemView.resources) val line = mData[currentPosition] holder.lineName.text = line.lineName diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchtask/SwitchLineTaskAdapter.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchtask/SwitchLineTaskAdapter.kt index 2df1e1db99..c591caa1e6 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchtask/SwitchLineTaskAdapter.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchtask/SwitchLineTaskAdapter.kt @@ -13,6 +13,7 @@ import com.mogo.och.common.module.manager.loop.BizLoopManager import com.mogo.och.weaknet.ui.switchtask.SwitchLineTaskAdapter.SwitchLineTaskViewHolder import com.mogo.och.shuttle.weaknet.R import com.mogo.och.weaknet.repository.db.bean.TaskDataBean +import me.jessyan.autosize.AutoSizeCompat /** * 路线列表adapter @@ -49,6 +50,7 @@ class SwitchLineTaskAdapter( override fun onBindViewHolder(holder: SwitchLineTaskViewHolder, position: Int) { val currentPosition = holder.bindingAdapterPosition + AutoSizeCompat.autoConvertDensityOfGlobal(holder.itemView.resources) val task = mData[currentPosition] val taskStartTime = TimeUtils.millis2String(task.taskStartTime?:System.currentTimeMillis(), "HH:mm") holder.taskTime.text = taskStartTime diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchtask/SwitchTaskView.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchtask/SwitchTaskView.kt index b4e01f4b66..618795c1ed 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchtask/SwitchTaskView.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchtask/SwitchTaskView.kt @@ -6,9 +6,7 @@ import android.view.LayoutInflater import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.findViewTreeViewModelStoreOwner import androidx.recyclerview.widget.GridLayoutManager -import androidx.recyclerview.widget.LinearLayoutManager import com.mogo.eagle.core.utilcode.kotlin.onClick -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d import com.mogo.eagle.core.utilcode.util.ToastUtils import com.mogo.och.common.module.manager.loop.BizLoopManager @@ -52,7 +50,7 @@ class SwitchTaskView: WindowRelativeLayout, SwtichTaskModel.SwtichLineViewCallba private lateinit var mAdapter: SwitchLineTaskAdapter - private lateinit var linearLayoutManager:LinearLayoutManager + private lateinit var linearLayoutManager:GridLayoutManager init { LayoutInflater.from(context).inflate(R.layout.shuttle_weak_switch_task, this, true) @@ -60,7 +58,7 @@ class SwitchTaskView: WindowRelativeLayout, SwtichTaskModel.SwtichLineViewCallba } private fun initView(){ - linearLayoutManager = GridLayoutManager(context, 3) + linearLayoutManager = GridLayoutManager(context, 3) rv_switch_task.setLayoutManager(linearLayoutManager) mAdapter = SwitchLineTaskAdapter(context,null, mutableListOf()) rv_switch_task.setAdapter(mAdapter) diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/TaskRunningView.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/TaskRunningView.kt index fec5f9636a..ed002b7c05 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/TaskRunningView.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/TaskRunningView.kt @@ -6,13 +6,12 @@ import android.view.LayoutInflater import androidx.constraintlayout.widget.ConstraintLayout import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.findViewTreeViewModelStoreOwner -import androidx.recyclerview.widget.LinearLayoutManager import com.mogo.commons.AbsMogoApplication import com.mogo.eagle.core.utilcode.kotlin.onClick import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.och.common.module.manager.autopilot.line.LineManager import com.mogo.och.common.module.utils.ResourcesUtils -import com.mogo.och.common.module.wigets.CommonDialogStatus +import com.mogo.och.common.module.wigets.dialog.CommonDialogStatus import com.mogo.och.common.module.wigets.CommonSlideView import com.mogo.och.common.module.wigets.WrapContentLinearLayoutManager import com.mogo.och.shuttle.weaknet.R @@ -26,7 +25,6 @@ import kotlinx.android.synthetic.main.shuttle_weak_task_running.view.actv_runnin import kotlinx.android.synthetic.main.shuttle_weak_task_running.view.bus_task_running_line_name import kotlinx.android.synthetic.main.shuttle_weak_task_running.view.loading_arrive_station import kotlinx.android.synthetic.main.shuttle_weak_task_running.view.rl_running_task_station_list -import me.jessyan.autosize.utils.AutoSizeUtils class TaskRunningView: ConstraintLayout, TaskRunningModel.SwtichLineViewCallback { diff --git a/OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/bus_open_qr.png b/OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/bus_open_qr.png new file mode 100755 index 0000000000..8bc5065349 Binary files /dev/null and b/OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/bus_open_qr.png differ diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/routing/errorpoint/ErrorPointItemAdapter.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/routing/errorpoint/ErrorPointItemAdapter.kt index adc5ef1fc0..8246fef006 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/routing/errorpoint/ErrorPointItemAdapter.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/routing/errorpoint/ErrorPointItemAdapter.kt @@ -5,9 +5,13 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.CheckBox +import androidx.appcompat.widget.AppCompatImageView +import androidx.appcompat.widget.AppCompatTextView import androidx.recyclerview.widget.RecyclerView +import com.mogo.eagle.core.utilcode.kotlin.onClick import com.mogo.och.unmanned.taxi.R import com.mogo.och.unmanned.taxi.bean.PointError +import me.jessyan.autosize.AutoSizeCompat /** * Created by yangyakun on 06/06/17. @@ -42,12 +46,16 @@ class ErrorPointItemAdapter( override fun onBindViewHolder(holder: TextVH, position: Int) { val errorInfo = dataList[holder.bindingAdapterPosition] - holder.cbErrorInfo.text = errorInfo.name - holder.cbErrorInfo.isChecked = errorInfo.isCheck - holder.cbErrorInfo.setOnCheckedChangeListener { buttonView, isChecked -> - if(buttonView==holder.cbErrorInfo){ - errorInfo.isCheck = isChecked - } + AutoSizeCompat.autoConvertDensityOfGlobal(holder.itemView.resources) + if (errorInfo.isCheck) { + holder.cbErrorInfo.setImageResource(R.drawable.taxi_routing_check) + }else{ + holder.cbErrorInfo.setImageResource(R.drawable.taxi_routing_uncheck) + } + holder.cbErrorResong.text = errorInfo.name + holder.itemView.onClick { + errorInfo.isCheck = !errorInfo.isCheck + notifyItemChanged(holder.bindingAdapterPosition) } } @@ -56,9 +64,7 @@ class ErrorPointItemAdapter( } inner class TextVH(itemView: View) : RecyclerView.ViewHolder(itemView) { - var cbErrorInfo: CheckBox - init { - cbErrorInfo = itemView.findViewById(R.id.cb_error_info) - } + var cbErrorInfo: AppCompatImageView = itemView.findViewById(R.id.aciv_show_check_status) + var cbErrorResong: AppCompatTextView = itemView.findViewById(R.id.actv_error_resong) } } \ No newline at end of file diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/routing/errorpoint/ReportErrorPointView.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/routing/errorpoint/ReportErrorPointView.kt index bdf995e721..bdbbb74ab2 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/routing/errorpoint/ReportErrorPointView.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/routing/errorpoint/ReportErrorPointView.kt @@ -4,6 +4,7 @@ import android.content.Context import android.util.AttributeSet import android.view.LayoutInflater import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.GridLayoutManager import com.google.android.flexbox.AlignItems import com.google.android.flexbox.FlexDirection import com.google.android.flexbox.FlexWrap @@ -14,9 +15,11 @@ import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant import com.mogo.eagle.core.utilcode.util.TimeUtils import com.mogo.eagle.core.utilcode.util.ToastUtils import com.mogo.och.common.module.wigets.WindowRelativeLayout +import com.mogo.och.common.module.wigets.dialog.CommonFeedbackDialog import com.mogo.och.unmanned.taxi.R import com.mogo.och.unmanned.taxi.bean.PointError import com.mogo.och.unmanned.taxi.ui.routing.TaxiRoutingLoadingDialog +import kotlinx.android.synthetic.main.taxt_report_error_point_panel.view.lvs_loding import kotlinx.android.synthetic.main.taxt_report_error_point_panel.view.rvErrorPointReason import kotlinx.android.synthetic.main.taxt_report_error_point_panel.view.tv_report_error_point_reason import kotlinx.android.synthetic.main.taxt_report_error_point_panel.view.tv_report_error_point_reason_cancel @@ -58,12 +61,6 @@ class ReportErrorPointView : WindowRelativeLayout, private var occurrenceTime:Long = System.currentTimeMillis() - private val mLoadingDialog: TaxiRoutingLoadingDialog by lazy { - TaxiRoutingLoadingDialog( - context - ) - } - private fun initView() { d(SceneConstant.M_TAXI_P + TAG, "initView") LayoutInflater.from(context).inflate(R.layout.taxt_report_error_point_panel, this, true) @@ -73,7 +70,7 @@ class ReportErrorPointView : WindowRelativeLayout, flexboxLayoutManager.alignItems = AlignItems.CENTER flexboxLayoutManager.flexWrap = FlexWrap.WRAP - rvErrorPointReason?.layoutManager = flexboxLayoutManager + rvErrorPointReason?.layoutManager = GridLayoutManager(context, 2) rvErrorPointReason?.setHasFixedSize(true) errorPointItemAdapter = ErrorPointItemAdapter( context, mutableListOf( @@ -91,7 +88,8 @@ class ReportErrorPointView : WindowRelativeLayout, ToastUtils.showShort("请选择问题类型") return@onClick } - mLoadingDialog.showLoading() + tv_report_error_point_reason_cancel.isEnabled = false + lvs_loding.visibility = VISIBLE this.viewModel?.submitErrorPointReasons(checkDataList,occurrenceTime) } } @@ -101,9 +99,8 @@ class ReportErrorPointView : WindowRelativeLayout, d(SceneConstant.M_TAXI_P + TAG, "展示---:${isVisible}") if (isVisible) { occurrenceTime = System.currentTimeMillis() - tv_work_order_time.text = "时间:${TimeUtils.millis2String(occurrenceTime, TimeUtils.getHourMinSecondFormat())}" + tv_work_order_time.text = TimeUtils.millis2String(occurrenceTime, TimeUtils.getHourMinSecondFormat()) viewModel?.getPointErrorReasons() - mLoadingDialog.showLoading() } else { } @@ -130,7 +127,6 @@ class ReportErrorPointView : WindowRelativeLayout, } override fun addViewData(it: MutableList) { - mLoadingDialog.hideLoading() errorPointItemAdapter.setDataList(it) } @@ -138,12 +134,23 @@ class ReportErrorPointView : WindowRelativeLayout, msg?.let { ToastUtils.showLong(msg) } - mLoadingDialog.hideLoading() + lvs_loding.visibility = GONE + CommonFeedbackDialog + .Builder() + .title("请重试") + .status(CommonFeedbackDialog.Status.success) + .build(context).show() } override fun submitErrorReasons() { - mLoadingDialog.hideLoading() - this.closeCallback?.close() + tv_report_error_point_reason_cancel.isEnabled = true + lvs_loding.visibility = GONE + closeCallback?.close() + CommonFeedbackDialog + .Builder() + .title("打点成功") + .status(CommonFeedbackDialog.Status.success) + .build(context).show() } fun setDismiss(listener: CloseCallback) { diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/routing/routingrunning/RoutingRunningView.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/routing/routingrunning/RoutingRunningView.kt index 23b92e2589..8b2dc893db 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/routing/routingrunning/RoutingRunningView.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/routing/routingrunning/RoutingRunningView.kt @@ -26,6 +26,7 @@ import com.mogo.och.unmanned.taxi.ui.routing.RoutingSwitchModel import com.mogo.och.unmanned.taxi.ui.routing.TaxiRoutingFeedbackDialog import com.mogo.och.unmanned.taxi.ui.routing.TaxiRoutingModel import com.mogo.och.common.module.map.MapMakerManager +import com.mogo.och.common.module.wigets.dialog.CommonDialogStatus import com.mogo.och.unmanned.taxi.utils.TaskUtils import kotlinx.android.synthetic.main.unmanned_routing_running.view.actv_current_itinerary_end_name import kotlinx.android.synthetic.main.unmanned_routing_running.view.actv_current_itinerary_start_name @@ -91,16 +92,16 @@ class RoutingRunningView: ConstraintLayout, RoutingRunningModel.RoutingRuningCal private fun showFeedbackDialog(grayId: Long) { val occurrenceTime = System.currentTimeMillis() - val builder: TaxiRoutingFeedbackDialog.Builder = TaxiRoutingFeedbackDialog.Builder() - builder.cancelStr( - MainMoGoApplication.getApp() - .getString(R.string.routing_feedback_result_btn_not_sure) - ).confirmStr( - MainMoGoApplication.getApp() - .getString(R.string.routing_feedback_result_btn_sure) - ).tips(MainMoGoApplication.getApp().getString(R.string.routing_feedback_result_hint)) - .clickListener(object : - TaxiRoutingFeedbackDialog.TaxiRoutingFeedBackDialogClickListener { + CommonDialogStatus + .Builder() + .title("路线验证结束") + .tips("请点击按钮反馈验证结果") + .showClose(true) + .cancelTextColor(R.color.taxi_color_FF4E41) + .cancelStr("线路可用") + .confirmStr("线路不可用") + .status(CommonDialogStatus.Status.success) + .clickListener(object :CommonDialogStatus.ClickListener{ override fun confirm() { swtichViewModel?.showLoading() viewModel?.endGrayTask( grayId, @@ -115,8 +116,36 @@ class RoutingRunningView: ConstraintLayout, RoutingRunningModel.RoutingRuningCal occurrenceTime) } }) - mFeedbackDialog = builder.build(context) - mFeedbackDialog?.showDialog() + .build(context).show() + + + +// val builder: TaxiRoutingFeedbackDialog.Builder = TaxiRoutingFeedbackDialog.Builder() +// builder.cancelStr( +// MainMoGoApplication.getApp() +// .getString(R.string.routing_feedback_result_btn_not_sure) +// ).confirmStr( +// MainMoGoApplication.getApp() +// .getString(R.string.routing_feedback_result_btn_sure) +// ).tips(MainMoGoApplication.getApp().getString(R.string.routing_feedback_result_hint)) +// .clickListener(object : +// TaxiRoutingFeedbackDialog.TaxiRoutingFeedBackDialogClickListener { +// override fun confirm() { +// swtichViewModel?.showLoading() +// viewModel?.endGrayTask( grayId, +// EndGrayTaskFeedbackType.USABLE_YES, +// occurrenceTime) +// } +// +// override fun cancel() { +// swtichViewModel?.showLoading() +// viewModel?.endGrayTask( grayId, +// EndGrayTaskFeedbackType.USABLE_NO, +// occurrenceTime) +// } +// }) +// mFeedbackDialog = builder.build(context) +// mFeedbackDialog?.showDialog() } /** diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/routing/routingselect/RoutingItemAdapter.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/routing/routingselect/RoutingItemAdapter.kt index 7624eafd9e..a00ac183ae 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/routing/routingselect/RoutingItemAdapter.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/routing/routingselect/RoutingItemAdapter.kt @@ -10,6 +10,7 @@ import androidx.recyclerview.widget.DiffUtil.Callback import androidx.recyclerview.widget.RecyclerView import com.mogo.och.unmanned.taxi.R import com.mogo.och.unmanned.taxi.bean.GrayLineBean +import me.jessyan.autosize.AutoSizeCompat /** * 路线列表adapter @@ -49,6 +50,7 @@ class RoutingItemAdapter( override fun onBindViewHolder(holder: RoutingItemViewHolder, position: Int) { val currentPosition = holder.bindingAdapterPosition val routing = mData[currentPosition] + AutoSizeCompat.autoConvertDensityOfGlobal(holder.itemView.resources) holder.routingName.text = routing.lineName holder.todayVerifyNum.text = "今日验证:${routing.carVerificationCount}次" diff --git a/OCH/taxi/unmanned-driver/src/main/res/drawable-nodpi/taxi_routing_check.png b/OCH/taxi/unmanned-driver/src/main/res/drawable-nodpi/taxi_routing_check.png new file mode 100644 index 0000000000..803e261954 Binary files /dev/null and b/OCH/taxi/unmanned-driver/src/main/res/drawable-nodpi/taxi_routing_check.png differ diff --git a/OCH/taxi/unmanned-driver/src/main/res/drawable-nodpi/taxi_routing_uncheck.png b/OCH/taxi/unmanned-driver/src/main/res/drawable-nodpi/taxi_routing_uncheck.png new file mode 100644 index 0000000000..e6fccf1a1b Binary files /dev/null and b/OCH/taxi/unmanned-driver/src/main/res/drawable-nodpi/taxi_routing_uncheck.png differ diff --git a/OCH/taxi/unmanned-driver/src/main/res/layout/taxt_report_error_point_item.xml b/OCH/taxi/unmanned-driver/src/main/res/layout/taxt_report_error_point_item.xml index 3eafa3b682..9f19d39c77 100644 --- a/OCH/taxi/unmanned-driver/src/main/res/layout/taxt_report_error_point_item.xml +++ b/OCH/taxi/unmanned-driver/src/main/res/layout/taxt_report_error_point_item.xml @@ -1,19 +1,31 @@ - - + + - \ No newline at end of file + \ No newline at end of file diff --git a/OCH/taxi/unmanned-driver/src/main/res/layout/taxt_report_error_point_panel.xml b/OCH/taxi/unmanned-driver/src/main/res/layout/taxt_report_error_point_panel.xml index 5b928cbc03..445d98f3a8 100644 --- a/OCH/taxi/unmanned-driver/src/main/res/layout/taxt_report_error_point_panel.xml +++ b/OCH/taxi/unmanned-driver/src/main/res/layout/taxt_report_error_point_panel.xml @@ -1,105 +1,92 @@ - - - + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="@dimen/dp_900" + android:layout_height="@dimen/dp_730" + android:background="@drawable/common_qr_dialog" + app:roundLayoutRadius="@dimen/dp_50"> + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent" + android:layout_marginTop="@dimen/dp_51" + /> - - - - + app:layout_constraintTop_toTopOf="@+id/tv_report_title" + app:layout_constraintBottom_toBottomOf="@+id/tv_report_title" + app:layout_constraintEnd_toEndOf="parent" + /> + android:layout_height="@dimen/dp_0" + android:layout_marginStart="@dimen/dp_65" + android:layout_marginTop="@dimen/dp_56" + android:layout_marginEnd="@dimen/dp_65" + android:layout_marginBottom="@dimen/dp_10" + app:layout_constraintBottom_toTopOf="@+id/tv_report_error_point_reason" + app:layout_constraintTop_toBottomOf="@+id/tv_report_title" /> + app:layout_constraintStart_toStartOf="parent" + android:layout_marginStart="@dimen/dp_65" + /> + + + app:layout_constraintEnd_toEndOf="parent" + /> - \ No newline at end of file + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 101a12d2e0..6822f1dff2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -161,6 +161,10 @@ android { packagingOptions { exclude 'META-INF/io.netty.versions.properties' + doNotStrip '*/armeabi-v7a/*.so' + doNotStrip '*/armeabi/*.so' + doNotStrip '*/x86_64/*.so' + doNotStrip '*/x86/*.so' } useLibrary 'android.test.runner' @@ -201,8 +205,7 @@ dependencies { compileOnly rootProject.ext.dependencies.serialport } -// implementation rootProject.ext.dependencies.mogocustommap - implementation project(':libraries:mapmodule') + implementation rootProject.ext.dependencies.mogocustommap implementation project(':core:function-impl:mogo-core-function-startup') implementation project(':core:function-impl:mogo-core-function-devatools') diff --git a/app/config/MediaUrlConfig.json b/app/config/MediaUrlConfig.json index 992d0c298b..2a41f95842 100644 --- a/app/config/MediaUrlConfig.json +++ b/app/config/MediaUrlConfig.json @@ -6,60 +6,70 @@ "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357256102/1.jpg", "fileType": 1, "coverImageUrl": "", + "priority": 2, "title": "1" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357382357/2.png", "fileType": 1, "coverImageUrl": "", + "priority": 2, "title": "2" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357557335/3.mp4", "fileType": 2, "coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357382357/2.png", + "priority": 2, "title": "3" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357598483/4.jpg", "fileType": 1, "coverImageUrl": "", + "priority": 2, "title": "4" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357834634/5.m4v", "fileType": 2, "coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357598483/4.jpg", + "priority": 2, "title": "5" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676358660379/6.m4v", "fileType": 2, "coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357598483/4.jpg", + "priority": 2, "title": "6" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360154589/7.jpg", "fileType": 1, "coverImageUrl": "", + "priority": 2, "title": "7" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360185500/8.jpg", "fileType": 1, "coverImageUrl": "", + "priority": 2, "title": "8" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360224773/9.png", "fileType": 1, "coverImageUrl": "", + "priority": 2, "title": "9" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360274126/10.mp4", "fileType": 2, "coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360224773/9.png", + "priority": 2, "title": "10" } ] @@ -70,12 +80,14 @@ "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1681716116231/6923474a99a1983c9a0410ad3357888d.mov", "fileType": 2, "coverImageUrl": "", + "priority": 2, "title": "1" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1681716116231/6923474a99a1983c9a0410ad3357888d.mov", "fileType": 2, "coverImageUrl": "", + "priority": 2, "title": "2" } ] @@ -86,24 +98,28 @@ "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708499497/大运会合作解说版.m4v", "fileType": 2, "coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969536177/大运会.png", + "priority": 2, "title": "蘑菇车联牵手成都大运会" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708596763/全车型混剪增加红旗车队.m4v", "fileType": 2, "coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969511280/车队.png", + "priority": 2, "title": "蘑菇车联覆盖生活的方方面面" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708554279/红旗车队.m4v", "fileType": 2, "coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969553174/红旗重新排版.png", + "priority": 2, "title": "蘑菇车联之红旗车队" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708409810/20210610重新排版3屏.m4v", "fileType": 2, "coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969579713/三屏.png", + "priority": 2, "title": "多视角体验蘑菇车联自动驾驶" } ] @@ -114,24 +130,28 @@ "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708499497/大运会合作解说版.m4v", "fileType": 2, "coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969536177/大运会.png", + "priority": 2, "title": "蘑菇车联牵手成都大运会" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708596763/全车型混剪增加红旗车队.m4v", "fileType": 2, "coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969511280/车队.png", + "priority": 2, "title": "蘑菇车联覆盖生活的方方面面" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708554279/红旗车队.m4v", "fileType": 2, "coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969553174/红旗重新排版.png", + "priority": 2, "title": "蘑菇车联之红旗车队" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708409810/20210610重新排版3屏.m4v", "fileType": 2, "coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969579713/三屏.png", + "priority": 2, "title": "多视角体验蘑菇车联自动驾驶" } ] @@ -150,24 +170,28 @@ "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357256102/1.jpg", "fileType": 1, "coverImageUrl": "", + "priority": 2, "title": "1" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357382357/2.png", "fileType": 1, "coverImageUrl": "", + "priority": 2, "title": "2" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357557335/3.mp4", "fileType": 2, "coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357382357/2.png", + "priority": 2, "title": "3" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357598483/4.jpg", "fileType": 1, "coverImageUrl": "", + "priority": 2, "title": "4" }, { @@ -180,36 +204,42 @@ "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357834634/5.m4v", "fileType": 2, "coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357598483/4.jpg", + "priority": 2, "title": "5" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676358660379/6.m4v", "fileType": 2, "coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357598483/4.jpg", + "priority": 2, "title": "6" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360154589/7.jpg", "fileType": 1, "coverImageUrl": "", + "priority": 2, "title": "7" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360185500/8.jpg", "fileType": 1, "coverImageUrl": "", + "priority": 2, "title": "8" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360224773/9.png", "fileType": 1, "coverImageUrl": "", + "priority": 2, "title": "9" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360274126/10.mp4", "fileType": 2, "coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360224773/9.png", + "priority": 2, "title": "10" } ] @@ -220,12 +250,14 @@ "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1681716116231/6923474a99a1983c9a0410ad3357888d.mov", "fileType": 2, "coverImageUrl": "", + "priority": 2, "title": "1" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1681716116231/6923474a99a1983c9a0410ad3357888d.mov", "fileType": 2, "coverImageUrl": "", + "priority": 2, "title": "2" } ] @@ -236,24 +268,28 @@ "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708499497/大运会合作解说版.m4v", "fileType": 2, "coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969536177/大运会.png", + "priority": 2, "title": "蘑菇车联牵手成都大运会" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708596763/全车型混剪增加红旗车队.m4v", "fileType": 2, "coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969511280/车队.png", + "priority": 2, "title": "蘑菇车联覆盖生活的方方面面" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708554279/红旗车队.m4v", "fileType": 2, "coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969553174/红旗重新排版.png", + "priority": 2, "title": "蘑菇车联之红旗车队" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708409810/20210610重新排版3屏.m4v", "fileType": 2, "coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969579713/三屏.png", + "priority": 2, "title": "多视角体验蘑菇车联自动驾驶" } ] @@ -264,24 +300,28 @@ "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708499497/大运会合作解说版.m4v", "fileType": 2, "coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969536177/大运会.png", + "priority": 2, "title": "蘑菇车联牵手成都大运会" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708596763/全车型混剪增加红旗车队.m4v", "fileType": 2, "coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969511280/车队.png", + "priority": 2, "title": "蘑菇车联覆盖生活的方方面面" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708554279/红旗车队.m4v", "fileType": 2, "coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969553174/红旗重新排版.png", + "priority": 2, "title": "蘑菇车联之红旗车队" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708409810/20210610重新排版3屏.m4v", "fileType": 2, "coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969579713/三屏.png", + "priority": 2, "title": "多视角体验蘑菇车联自动驾驶" } ] @@ -294,12 +334,14 @@ "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1681210971943/yangmadou.mp4", "fileType": 2, "coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1680774790614/yangmadao_photo.jpg", + "priority": 2, "title": "1" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1681210971943/yangmadou.mp4", "fileType": 2, "coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1680774790614/yangmadao_photo.jpg", + "priority": 2, "title": "2" } ] @@ -310,12 +352,14 @@ "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1681716116231/6923474a99a1983c9a0410ad3357888d.mov", "fileType": 2, "coverImageUrl": "", + "priority": 2, "title": "1" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1681716116231/6923474a99a1983c9a0410ad3357888d.mov", "fileType": 2, "coverImageUrl": "", + "priority": 2, "title": "2" } ] @@ -326,24 +370,28 @@ "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708499497/大运会合作解说版.m4v", "fileType": 2, "coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969536177/大运会.png", + "priority": 2, "title": "蘑菇车联牵手成都大运会" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708596763/全车型混剪增加红旗车队.m4v", "fileType": 2, "coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969511280/车队.png", + "priority": 2, "title": "蘑菇车联覆盖生活的方方面面" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708554279/红旗车队.m4v", "fileType": 2, "coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969553174/红旗重新排版.png", + "priority": 2, "title": "蘑菇车联之红旗车队" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708409810/20210610重新排版3屏.m4v", "fileType": 2, "coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969579713/三屏.png", + "priority": 2, "title": "多视角体验蘑菇车联自动驾驶" } ] @@ -354,24 +402,28 @@ "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708499497/大运会合作解说版.m4v", "fileType": 2, "coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969536177/大运会.png", + "priority": 2, "title": "蘑菇车联牵手成都大运会" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708596763/全车型混剪增加红旗车队.m4v", "fileType": 2, "coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969511280/车队.png", + "priority": 2, "title": "蘑菇车联覆盖生活的方方面面" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708554279/红旗车队.m4v", "fileType": 2, "coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969553174/红旗重新排版.png", + "priority": 2, "title": "蘑菇车联之红旗车队" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708409810/20210610重新排版3屏.m4v", "fileType": 2, "coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969579713/三屏.png", + "priority": 2, "title": "多视角体验蘑菇车联自动驾驶" } ] @@ -384,10 +436,12 @@ "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357256102/1.jpg", "fileType": 1, "coverImageUrl": "", + "priority": 2, "title": "1" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357382357/2.png", + "priority": 2, "fileType": 1, "coverImageUrl": "", "title": "2" @@ -396,48 +450,56 @@ "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357557335/3.mp4", "fileType": 2, "coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357382357/2.png", + "priority": 2, "title": "3" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357598483/4.jpg", "fileType": 1, "coverImageUrl": "", + "priority": 2, "title": "4" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357834634/5.m4v", "fileType": 2, "coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357598483/4.jpg", + "priority": 2, "title": "5" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676358660379/6.m4v", "fileType": 2, "coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357598483/4.jpg", + "priority": 2, "title": "6" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360154589/7.jpg", "fileType": 1, "coverImageUrl": "", + "priority": 2, "title": "7" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360185500/8.jpg", "fileType": 1, "coverImageUrl": "", + "priority": 2, "title": "8" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360224773/9.png", "fileType": 1, "coverImageUrl": "", + "priority": 2, "title": "9" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360274126/10.mp4", "fileType": 2, "coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360224773/9.png", + "priority": 2, "title": "10" } ] @@ -448,12 +510,14 @@ "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1681716116231/6923474a99a1983c9a0410ad3357888d.mov", "fileType": 2, "coverImageUrl": "", + "priority": 2, "title": "1" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1681716116231/6923474a99a1983c9a0410ad3357888d.mov", "fileType": 2, "coverImageUrl": "", + "priority": 2, "title": "2" } ] @@ -464,24 +528,28 @@ "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708499497/大运会合作解说版.m4v", "fileType": 2, "coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969536177/大运会.png", + "priority": 2, "title": "蘑菇车联牵手成都大运会" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708596763/全车型混剪增加红旗车队.m4v", "fileType": 2, "coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969511280/车队.png", + "priority": 2, "title": "蘑菇车联覆盖生活的方方面面" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708554279/红旗车队.m4v", "fileType": 2, "coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969553174/红旗重新排版.png", + "priority": 2, "title": "蘑菇车联之红旗车队" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708409810/20210610重新排版3屏.m4v", "fileType": 2, "coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969579713/三屏.png", + "priority": 2, "title": "多视角体验蘑菇车联自动驾驶" } ] @@ -492,24 +560,28 @@ "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708499497/大运会合作解说版.m4v", "fileType": 2, "coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969536177/大运会.png", + "priority": 2, "title": "蘑菇车联牵手成都大运会" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708596763/全车型混剪增加红旗车队.m4v", "fileType": 2, "coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969511280/车队.png", + "priority": 2, "title": "蘑菇车联覆盖生活的方方面面" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708554279/红旗车队.m4v", "fileType": 2, "coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969553174/红旗重新排版.png", + "priority": 2, "title": "蘑菇车联之红旗车队" }, { "fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708409810/20210610重新排版3屏.m4v", "fileType": 2, "coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969579713/三屏.png", + "priority": 2, "title": "多视角体验蘑菇车联自动驾驶" } ] diff --git a/app/src/main/java/com/mogo/launcher/startup/ConfigStartUp.kt b/app/src/main/java/com/mogo/launcher/startup/ConfigStartUp.kt index a7cf796c2c..a444ed5319 100644 --- a/app/src/main/java/com/mogo/launcher/startup/ConfigStartUp.kt +++ b/app/src/main/java/com/mogo/launcher/startup/ConfigStartUp.kt @@ -1,28 +1,35 @@ package com.mogo.launcher.startup import android.content.Context +import com.autonavi.nge.hdmap.HDMapProvider import com.google.gson.reflect.TypeToken import com.mogo.commons.debug.DebugConfig import com.mogo.eagle.core.data.app.AppConfigInfo import com.mogo.eagle.core.data.app.UrlConfig import com.mogo.eagle.core.data.config.FunctionBuildConfig -import com.mogo.eagle.core.data.config.HdMapBuildConfig import com.mogo.eagle.core.data.config.HmiBuildConfig import com.mogo.eagle.core.data.config.JunkConfig +import com.mogo.eagle.core.data.deva.chain.ChainConstant import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils +import com.mogo.eagle.core.utilcode.mogo.logger.Logger import com.mogo.eagle.core.utilcode.util.GsonUtils import com.mogo.eagle.core.utilcode.util.ProcessUtils import com.mogo.eagle.core.utilcode.util.StringUtils import com.mogo.launcher.BuildConfig -import com.mogo.launcher.R import com.shuyu.gsyvideoplayer.player.IjkPlayerManager import com.zhidaoauto.map.sdk.open.MapAutoApi import com.zhidaoauto.map.sdk.open.MapParams import com.zhjt.mogo_core_function_devatools.env.EnvChangeManager +import com.zhjt.service.chain.ChainLog import tv.danmaku.ijk.media.player.IjkMediaPlayer +import java.util.concurrent.atomic.AtomicReference object ConfigStartUp { + private const val TAG = "ConfigStartUp" + + private val redisCallback by lazy { AtomicReference()} + @JvmStatic fun init(context: Context) { initDebugConfig() @@ -112,12 +119,78 @@ object ConfigStartUp { } val mapParams = MapParams.init() - mapParams.setDebugMode(false) + mapParams.setDebugMode(true) // 1-使用本地地图数据,0-使用在线地图数据 // .setDataFileSource(1) .setIsRecordLogs(false) .setCoordinateType(MapParams.COORDINATETYPE_GCJ02) MapAutoApi.init(context, mapParams) + HDMapProvider.setRedisDataLoadCallback(object : HDMapProvider.IRedisLoadCallback { + override fun onLoginStart(ip: String, port: Int, password: String, dbIndex: Int) { + Logger.d(TAG, "-- onLoginStart --: ip: $ip, port: $port, password: $password, dbIndex: $dbIndex") + onRedisDataLoadRoute(mapOf("onLoginStart" to "ip:$ip, port:$port, password: $password, dbIndex: $dbIndex")) + } + + + override fun onLoginSuccess() { + Logger.d(TAG, "-- onLoginSuccess --") + onRedisDataLoadRoute(mapOf("onLoginSuccess" to "")) + } + + override fun onLoginFailed(error: String?) { + Logger.d(TAG, "-- onLoginFailed($error) --") + onRedisDataLoadRoute(mapOf("onLoginFailed" to "fail_reason:$error")) + } + + override fun onReLogin(isCanRetry: Boolean) { + Logger.d(TAG, "-- onReLogin($isCanRetry) --") + onRedisDataLoadRoute(mapOf("onReLogin" to "isCanRetry:$isCanRetry")) + } + + override fun onTileLoadStart(layerId: String, tileId: String) { + Logger.d(TAG, "-- onTileLoadStart(layerId: $layerId, tileId: $tileId) --") + onRedisDataLoadRoute(mapOf("onTileLoadStart" to "layerId: $layerId, tileId: $tileId")) + } + + override fun onTileLoadFail(layerId: String, tileId: String, error: String) { + Logger.d(TAG, "-- onTileLoadFail(layerId: $layerId, tileId: $tileId, error: $error) --") + onRedisDataLoadRoute(mapOf("onTileLoadFail" to "layerId: $layerId, tileId: $tileId, error: $error")) + } + + override fun onTileLoadSuccess(layerId: String, tileId: String) { + Logger.d(TAG, "-- onTileLoadSuccess(layerId: $layerId, tileId: $tileId) --") + onRedisDataLoadRoute(mapOf("onTileLoadSuccess" to "layerId: $layerId, tileId: $tileId")) + } + + override fun onTilesLoadStart(layerId: String, tileIds: List) { + Logger.d(TAG, "-- onTilesLoadStart(layerId: $layerId, tileIds: ${tileIds.joinToString(",")}) --") + onRedisDataLoadRoute(mapOf("onTilesLoadStart" to "layerId: $layerId, tileIds: ${tileIds.joinToString(",")}")) + } + + override fun onTilesLoadFail(layerId: String, tileIds: List, error: String?) { + Logger.d(TAG, "-- onTilesLoadFail(layerId: $layerId, tileIds: ${tileIds.joinToString(",")}, error: $error) --") + onRedisDataLoadRoute(mapOf("onTilesLoadFail" to "layerId: $layerId, tileIds: ${tileIds.joinToString(",")}, error:$error")) + } + + + override fun onTilesLoadSuccess(layerId: String, tileIds: List) { + Logger.d(TAG, "-- onTilesLoadSuccess(layerId: $layerId, tileIds: ${tileIds.joinToString(",")}) --") + onRedisDataLoadRoute(mapOf("onTilesLoadSuccess" to "layerId: $layerId, tileIds: ${tileIds.joinToString(",")}")) + } + }.also { + redisCallback.set(it) // 将此回调保存起来,只为了在native层的引用不回收,因为native层的引用是全局弱引用 + }) + + // HDMapProvider.toggleSystrace(true) // 开启systrace, 此功能默认关闭,只要在开发阶段定位渲染问题时才打开。(前提需要在地图sdk在关键节点进行手动打点后,再开启,之后使用systrace工具进行抓取trace文件进行分析) + // HDMapProvider.toggleMapDataDebugInfo(true) // 打开地图调试信息的文字展示,此功能也默认关闭,只有在地图测试工具中使用 } + + @ChainLog( + linkChainLog = ChainConstant.CHAIN_TYPE_STATUS, + linkCode = ChainConstant.CHAIN_SOURCE_CLOUD, + nodeAliasCode = ChainConstant.CHAIN_CODE_REDIS_DATA_LOAD, + paramIndexes = [0] + ) + private fun onRedisDataLoadRoute(extra: Map) {} } \ No newline at end of file diff --git a/build.gradle b/build.gradle index fc86454cbf..4b5751b6ab 100644 --- a/build.gradle +++ b/build.gradle @@ -153,6 +153,26 @@ subprojects.each { } } +subprojects.each { + it.afterEvaluate { itx -> + if (itx.plugins.hasPlugin('com.android.library') || itx.plugins.hasPlugin('com.android.application')) { + def android = itx.extensions.findByName("android") + android.buildTypes { + configureEach { buildType -> + def matchingFallbacks = buildType.matchingFallbacks ?: [] + def array = isReleaseBuild() ? ['release', 'debug'] : ['debug', 'release'] + array.each { fallback -> + if (!matchingFallbacks.contains(fallback)) { + matchingFallbacks += fallback + } + } + buildType.matchingFallbacks = matchingFallbacks + } + } + } + } +} + boolean isAndroidTestBuild() { for (String s : gradle.startParameter.taskNames) { if (s.contains("AndroidTest")) { @@ -172,5 +192,5 @@ boolean isReleaseBuild() { } boolean isJunkDetectEnable() { - return !isReleaseBuild() + return false } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/scenario/scene/airoad/AiRoadMarker.kt b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/scenario/scene/airoad/AiRoadMarker.kt index 5e585e9729..dccaa74662 100644 --- a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/scenario/scene/airoad/AiRoadMarker.kt +++ b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/scenario/scene/airoad/AiRoadMarker.kt @@ -113,8 +113,8 @@ class AiRoadMarker { .rotate(marker.poi_angle.toFloat()) .longitude(marker.poi_lon) .latitude(marker.poi_lat) - if (marker.poiType == EventTypeEnumNew.TYPE_SOCKET_ROAD_PEOPLE_CROSS.poiType || marker.poiType == EventTypeEnumNew.TYPE_SOCKET_ROAD_OTHER_RETROGRADE_VEHICLE.poiType) { - builder.anchorColor("#D65D5AFF") + if (marker.poiType == EventTypeEnumNew.TYPE_SOCKET_ROAD_PEOPLE_CROSS.poiType) { + builder.anchorColor("#FFBF10") } CallerMapUIServiceManager.getOverlayManager()?.showOrUpdatePoint(builder.build())?.let { p -> if (!markerIds.contains(markerId)) { diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/OfflineMapDialog.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/OfflineMapDialog.kt index 3f00f75b4e..9af3efb291 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/OfflineMapDialog.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/OfflineMapDialog.kt @@ -224,4 +224,15 @@ class OfflineMapDialog(context: Context) : BaseFloatDialog(context, TAG) { } }, UiThreadHandler.MODE.QUEUE) } + + override fun dismiss() { + super.dismiss() + if (isLoading) { + hmiAction( + "$M_HMI$TAG", + mapOf("dismiss-loading" to "cancel download") + ) + mogoMapData.get()?.cancelDownloadCacheData() + } + } } \ 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/ColdStartView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/ColdStartView.kt index 21d71e9d08..faab437b2d 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/ColdStartView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/ColdStartView.kt @@ -1,15 +1,39 @@ package com.mogo.eagle.core.function.hmi.ui.widget +import android.animation.ObjectAnimator +import android.animation.ValueAnimator import android.content.Context +import android.os.Build +import android.os.CountDownTimer +import android.text.Html import android.util.AttributeSet import android.view.LayoutInflater +import android.view.View +import android.view.animation.LinearInterpolator import androidx.constraintlayout.widget.ConstraintLayout +import androidx.core.content.ContextCompat import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener +import com.mogo.eagle.core.function.api.autopilot.IMoGoColdStartStateListener import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager +import com.mogo.eagle.core.function.call.autopilot.CallerColdStartStateListenerManager import com.mogo.eagle.core.function.hmi.R +import com.mogo.eagle.core.utilcode.util.ResourceUtils +import com.mogo.eagle.core.utilcode.util.ThreadUtils +import com.mogo.eagle.core.utilcode.util.UiThreadHandler import com.zhjt.mogo.adas.data.AdasConstants +import kotlinx.android.synthetic.main.view_cold_start.view.ivColdStartStatus +import kotlinx.android.synthetic.main.view_cold_start.view.ivIpcConnectStatus +import kotlinx.android.synthetic.main.view_cold_start.view.ivSsmConnectStatus +import kotlinx.android.synthetic.main.view_cold_start.view.tvColdStartContent +import kotlinx.android.synthetic.main.view_cold_start.view.tvColdStartNodeState +import kotlinx.android.synthetic.main.view_cold_start.view.tvIpcConnectContent +import kotlinx.android.synthetic.main.view_cold_start.view.tvSsmConnectContent +import kotlinx.android.synthetic.main.view_cold_start.view.tvSystemStartupTitle +import kotlinx.android.synthetic.main.view_cold_start.view.viewColdStartDivider +import kotlinx.android.synthetic.main.view_cold_start.view.viewSsmConnectDivider import system_master.SsmInfo import system_master.SystemStatusInfo +import java.lang.StringBuilder /** * 冷启动呈现二期 @@ -19,12 +43,31 @@ class ColdStartView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 -) : ConstraintLayout(context, attrs, defStyleAttr), IMoGoAutopilotStatusListener { +) : ConstraintLayout(context, attrs, defStyleAttr), IMoGoAutopilotStatusListener, + IMoGoColdStartStateListener { companion object { const val TAG = "ColdStartView" + const val LOAD_SSM_WAITING_TIME = 60000L //SSM加载超时等待时间 + const val COLD_START_WAITING_TIME = 300000L //冷启动超时等待时间 } + private var ipcConnectStatus = false //连接域控状态,默认是未连接 + private var ssmConnectStatus = false //SSM连接状态,默认是未连接 + private var coldStartStatus = false //冷启动状态,默认是未冷启动成功 + + private var ipcRotationAnim: ObjectAnimator?= null //域控连接状态动画 + + private var ssmRotationAnim: ObjectAnimator?= null //SSM连接状态动画 + private var connectSSMTimer: CountDownTimer?= null //连接SSM等待倒计时 + + private var coldStartRotationAnim: ObjectAnimator?= null //冷启动连接状态动画 + private var connectColdStartTimer: CountDownTimer?= null //连接冷启动等待倒计时 + + private val nodeStatusSb = StringBuilder() //冷启动关键节点启动详情 + + private var coldStartResultListener: ColdStartResultListener ?= null + init { LayoutInflater.from(context).inflate(R.layout.view_cold_start, this, true) initView() @@ -37,33 +80,101 @@ class ColdStartView @JvmOverloads constructor( override fun onAttachedToWindow() { super.onAttachedToWindow() CallerAutoPilotStatusListenerManager.addListener(TAG, this) + CallerColdStartStateListenerManager.addListener(TAG,this) } override fun onDetachedFromWindow() { super.onDetachedFromWindow() CallerAutoPilotStatusListenerManager.removeListener(TAG) + CallerColdStartStateListenerManager.removeListener(TAG) } override fun onAutopilotIpcConnectStatusChanged( status: AdasConstants.IpcConnectionStatus, reason: String? ){ - if(status == AdasConstants.IpcConnectionStatus.CONNECTED){ - //域控连接成功 - - }else{ - //域控连接失败 - + ThreadUtils.runOnUiThread { + ipcConnectStatus = if(status == AdasConstants.IpcConnectionStatus.CONNECTED){ + //域控连接成功 + if(!ipcConnectStatus){ + showIPCConnectSuccessView() + } + true + }else{ + //域控连接失败 + when(status){ + //主动断开连接 + AdasConstants.IpcConnectionStatus.DISCONNECTED ->{ + showIPCConnectFailView("域控未连接或主动断开连接,建议重启车辆并上报问题") + } + //连接中 + AdasConstants.IpcConnectionStatus.CONNECTING ->{ + showIPCConnecting() + } + //重连中(定时器) + AdasConstants.IpcConnectionStatus.RECONNECTING_TIMER ->{ + showIPCConnecting() + } + //重连中(网络监听) + AdasConstants.IpcConnectionStatus.RECONNECTING_NETWORK ->{ + showIPCConnecting() + } + //连接异常(鹰眼与域控连接失败、无法连接、非正常断开等) + AdasConstants.IpcConnectionStatus.CONNECT_EXCEPTION ->{ + showIPCConnectFailView("域控连接异常,建议检查WiFi连接情况及域控是否开机") + } + //非法地址(连接模式为指定地址时:表示当前鹰眼调用连接时传入的域控地址错误或不符合规则【不修改默认配置不会出现此问题】; + // 连接模式为PING模式时:表示传入的PING地址列表存在问题) + AdasConstants.IpcConnectionStatus.ILLEGAL_ADDRESS ->{ + showIPCConnectFailView("非法域控地址,建议重启车辆并上报问题") + } + //正在搜索域控地址 + AdasConstants.IpcConnectionStatus.SEARCH_ADDRESS ->{ + showIPCConnecting() + } + //找不到可用地址(域控地址列表中的全部地址均无法连通 + // 【不修改默认配置的情况下需要排查PAD是否连接车载路由器、工控机是否连接车载路由器、 + // 工控机是否开机等】) + AdasConstants.IpcConnectionStatus.NOT_FOUND_ADDRESS ->{ + showIPCConnectFailView("找不到域控可用地址,建议检查车载路由器及域控是否开机") + } + //域控证书认证异常 + AdasConstants.IpcConnectionStatus.CERTIFICATION_FAILED ->{ + showIPCConnectFailView("域控证书认证异常") + } + //心跳超时(连接域控成功后在一段时间内未收到域控任何数据),超时时间: + AdasConstants.IpcConnectionStatus.HEARTBEAT_TIMEOUT ->{ + showIPCConnectFailView("心跳超时(连接域控成功后在一段时间内未收到域控任何数据)") + } + //協議不匹配(被连接的域控端非WebSocket协议【可能性非常低】) + AdasConstants.IpcConnectionStatus.PROTOCOL_MISMATCH ->{ + showIPCConnectFailView("协议不匹配") + } + //域控主动断开连接(域控主动发起断开WebSocket连接 + AdasConstants.IpcConnectionStatus.SERVER_DISCONNECTED ->{ + showIPCConnectFailView("域控主动断开连接,建议重启车辆并上报问题") + } + } + false + } } } + + + + + /** * 状态查询应答 * @param status 数据 * HQ、M1 MAP350开始弃用,其他车型MAP360开始弃用 */ override fun onAutopilotStatusRespByQuery(status: SystemStatusInfo.StatusInfo) { - + ThreadUtils.runOnUiThread { + //SSM连接成功 + connectSSMSuccess() + } } @@ -74,7 +185,328 @@ class ColdStartView @JvmOverloads constructor( * @param statusInf 数据 */ override fun onSystemStatus(statusInf: SsmInfo.SsmStatusInf) { + ThreadUtils.runOnUiThread { + //SSM连接成功 + connectSSMSuccess() + } + } + + /** + * 冷启动状态变更上报以及查询状态 + * + * @param token 唯一消息ID + * @param timestamp 消息发送时间 单位:毫秒 + * @param isQuery 是否是查询 ture:查询相应的结果 false:表示状态变动域控主动推送 + * @param coldStartState 数据 null表示 PadSsmMsg中的消息体为null + */ + override fun onColdStartState( + token: Long, + timestamp: Long, + isQuery: Boolean, + coldStartState: SsmInfo.ColdStartState? + ) { + coldStartState?.let { + ThreadUtils.runOnUiThread { + if(it.eventStatus == SsmInfo.CSState.COLD_START_READY){ + //冷启动就绪 + showColdStartSuccessView() + } + tvColdStartContent.text = getColdStartEventStatus(it.eventStatus) + nodeStatusSb.clear() + it.nodeList.forEach {node-> + val nodeDetail = node.nodeName+ " " + getColdStartNodeStatus(node.status) + if(node.status == SsmInfo.NodeStatus.NODE_FAILED || node.status ==SsmInfo.NodeStatus.NODE_TIMEOUT){ + nodeStatusSb.append("${nodeDetail}") + }else{ + nodeStatusSb.append("${nodeDetail}") + } + nodeStatusSb.append("
") + } + tvColdStartNodeState.text = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + Html.fromHtml(nodeStatusSb.toString(), Html.FROM_HTML_MODE_LEGACY) + } else { + Html.fromHtml(nodeStatusSb.toString()) + } + } + } + } + + /** + * 冷启动状态 + */ + private fun getColdStartEventStatus(state: SsmInfo.CSState): String{ + return when(state){ + // 未开始 + SsmInfo.CSState.COLD_START_DEFAULT->{ + "启动中…" + } + // 启动中 + SsmInfo.CSState.COLD_START_STARTING->{ + "启动中…" + } + // 就绪 + SsmInfo.CSState.COLD_START_READY->{ + "系统启动成功,即将进入主页" + } + // 有异常未就绪 + SsmInfo.CSState.COLD_START_UNREADY->{ + "系统启动异常,建议重启车辆并上报问题" + } + // 超时 + SsmInfo.CSState.COLD_START_TIMEOUT->{ + "系统启动异常,建议重启车辆并上报问题" + } + } + } + + /** + * 获取节点启动状态 + */ + private fun getColdStartNodeStatus(nodeStatus: SsmInfo.NodeStatus): String{ + return when(nodeStatus){ + // 启动中 + SsmInfo.NodeStatus.NODE_STARTING->{ + "启动中…" + } + // 启动成功 + SsmInfo.NodeStatus.NODE_FINISH->{ + "启动成功" + } + // 启动失败 + SsmInfo.NodeStatus.NODE_FAILED->{ + "启动失败" + } + // 启动超时 + SsmInfo.NodeStatus.NODE_TIMEOUT->{ + "启动超时" + } + + } + } + + + /** + * 展示域控连接成功视图 + */ + private fun showIPCConnectSuccessView(){ + ipcRotationAnim?.cancel() + ivIpcConnectStatus.rotation = 0f + tvSystemStartupTitle.text = resources.getString(R.string.cold_start_in_progress_title) + ivIpcConnectStatus.setImageDrawable(ResourceUtils.getDrawable(R.drawable.icon_cold_start_success)) + tvIpcConnectContent.text = resources.getString(R.string.ipc_connect_success) + //开启连接SSM倒计时 + connectSSMProcess() + //域控连接成功后开始展示SSM连接状态 + viewSsmConnectDivider.visibility = View.VISIBLE + ivSsmConnectStatus.setImageDrawable(ResourceUtils.getDrawable(R.drawable.icon_cold_start_process)) + //旋转动画 + ssmRotationAnim = ObjectAnimator.ofFloat(ivSsmConnectStatus, "rotation", 0f, 360f) + ssmRotationAnim?.repeatCount = ValueAnimator.INFINITE + ssmRotationAnim?.repeatMode = ValueAnimator.RESTART + ssmRotationAnim?.duration = 1500 + ssmRotationAnim?.interpolator = LinearInterpolator() + ssmRotationAnim?.start() + //设置SSM连接文案为连接中 + tvSsmConnectContent.text = resources.getString(R.string.ssm_connect_loading) + tvSsmConnectContent.setTextColor(ContextCompat.getColor(context, android.R.color.white)) + viewSsmConnectDivider.visibility = View.VISIBLE + ivSsmConnectStatus.visibility = View.VISIBLE + tvSsmConnectContent.visibility = View.VISIBLE + //隐藏冷启动相关视图 + viewColdStartDivider.visibility = View.GONE + ivColdStartStatus.visibility = View.GONE + tvColdStartContent.visibility = View.GONE + } + + /** + * 展示域控连接失败视图 + */ + private fun showIPCConnectFailView(reason: String?){ + if(tvIpcConnectContent.text.isNotEmpty() && tvIpcConnectContent.text.equals(reason)){ + return + } + ipcRotationAnim?.cancel() + ivIpcConnectStatus.rotation = 0f + ivIpcConnectStatus.setImageDrawable(ResourceUtils.getDrawable(R.drawable.icon_cold_start_fail)) + reason?.let { + tvIpcConnectContent.text = it + } + //隐藏SSM相关视图 + viewSsmConnectDivider.visibility = View.GONE + ivSsmConnectStatus.visibility = View.GONE + tvSsmConnectContent.visibility = View.GONE + //隐藏冷启动相关视图 + viewColdStartDivider.visibility = View.GONE + ivColdStartStatus.visibility = View.GONE + tvColdStartContent.visibility = View.GONE } + private fun showIPCConnecting(){ + ivIpcConnectStatus.setImageDrawable(ResourceUtils.getDrawable(R.drawable.icon_cold_start_process)) + tvIpcConnectContent.text = "正在连接域控..." + ipcRotationAnim = ObjectAnimator.ofFloat(ivIpcConnectStatus, "rotation", 0f, 360f) + ipcRotationAnim?.repeatCount = ValueAnimator.INFINITE + ipcRotationAnim?.repeatMode = ValueAnimator.RESTART + ipcRotationAnim?.duration = 1500 + ipcRotationAnim?.interpolator = LinearInterpolator() + ipcRotationAnim?.start() + //隐藏SSM相关视图 + viewSsmConnectDivider.visibility = View.GONE + ivSsmConnectStatus.visibility = View.GONE + tvSsmConnectContent.visibility = View.GONE + //隐藏冷启动相关视图 + viewColdStartDivider.visibility = View.GONE + ivColdStartStatus.visibility = View.GONE + tvColdStartContent.visibility = View.GONE + } + + /** + * SSM连接成功 + */ + private fun connectSSMSuccess(){ + if(!ssmConnectStatus){ + showSSMConnectSuccessView() + //取消连接SSM超时等待倒计时 + connectSSMTimer?.cancel() + //开始启动冷启动等待倒计时 + coldStartProcess() + } + ssmConnectStatus = true + coldStartStatus = false + } + + /** + * 展示SSM连接成功视图 + */ + private fun showSSMConnectSuccessView(){ + tvSystemStartupTitle.text = resources.getString(R.string.cold_start_in_progress_title) + //取消旋转动画 + ssmRotationAnim?.cancel() + //取消连接SSM超时等待倒计时 + connectSSMTimer?.cancel() + //展示SSM连接成功视图 + ivSsmConnectStatus.rotation = 0f + ivSsmConnectStatus.setImageDrawable(ResourceUtils.getDrawable(R.drawable.icon_cold_start_success)) + tvSsmConnectContent.text = resources.getString(R.string.ssm_connect_success) + tvSsmConnectContent.setTextColor(ContextCompat.getColor(context, R.color.white)) + //展示冷启动连接过程视图 + viewColdStartDivider.visibility = View.VISIBLE + ivColdStartStatus.visibility = View.VISIBLE + tvColdStartContent.visibility = View.VISIBLE + tvColdStartContent.text = "启动中…" + ivColdStartStatus.setImageDrawable(ResourceUtils.getDrawable(R.drawable.icon_cold_start_process)) + //开启冷启动连接状态动画 + coldStartRotationAnim = ObjectAnimator.ofFloat(ivColdStartStatus, "rotation", 0f, 360f) + coldStartRotationAnim?.repeatCount = ValueAnimator.INFINITE + coldStartRotationAnim?.repeatMode = ValueAnimator.RESTART + coldStartRotationAnim?.duration = 1500 + coldStartRotationAnim?.interpolator = LinearInterpolator() + coldStartRotationAnim?.start() + } + + /** + * 展示SSM连接失败视图 + */ + private fun showSSMConnectFailView(){ + tvSystemStartupTitle.text = resources.getString(R.string.cold_start_fail_title) + //取消旋转动画 + ssmRotationAnim?.cancel() + ivSsmConnectStatus.rotation = 0f + ivSsmConnectStatus.setImageDrawable(ResourceUtils.getDrawable(R.drawable.icon_cold_start_fail)) + tvSsmConnectContent.text = resources.getString(R.string.ssm_connect_fail) + tvSsmConnectContent.setTextColor(ContextCompat.getColor(context, R.color.cold_start_fail)) + } + + /** + * 连接SSM过程 + */ + private fun connectSSMProcess(){ + ThreadUtils.runOnUiThread { + connectSSMTimer = object: CountDownTimer(LOAD_SSM_WAITING_TIME,LOAD_SSM_WAITING_TIME){ + override fun onTick(millisUntilFinished: Long) { + + } + + override fun onFinish() { + //将SSM连接状态置为false + ssmConnectStatus = false + coldStartStatus = false + //取消连接SSM超时等待倒计时 + connectSSMTimer?.cancel() + //展示连接SSM失败视图 + showSSMConnectFailView() + } + } + connectSSMTimer?.start() + } + } + + /** + * 冷启动过程 + */ + private fun coldStartProcess(){ + ThreadUtils.runOnUiThread { + connectColdStartTimer = object: CountDownTimer(COLD_START_WAITING_TIME,COLD_START_WAITING_TIME){ + override fun onTick(millisUntilFinished: Long) { + } + + override fun onFinish() { + //将冷启动状态置为false + coldStartStatus = false + //展示冷启动失败视图 + showColdStartFailView() + } + } + connectColdStartTimer?.start() + } + } + + /** + * 冷启动失败视图 + */ + private fun showColdStartFailView(){ + tvSystemStartupTitle.text = resources.getString(R.string.cold_start_fail_title) + coldStartRotationAnim?.cancel() + ivColdStartStatus.rotation = 0f + ivColdStartStatus.setImageDrawable(ResourceUtils.getDrawable(R.drawable.icon_cold_start_fail)) + tvColdStartContent.text = resources.getString(R.string.cold_start_fail_content) + coldStartResultListener?.coldStartFail() + } + + /** + * 冷启动成功视图 + */ + private fun showColdStartSuccessView(){ + tvSystemStartupTitle.text = resources.getString(R.string.cold_start_success_title) + coldStartRotationAnim?.cancel() + ivColdStartStatus.rotation = 0f + ivColdStartStatus.setImageDrawable(ResourceUtils.getDrawable(R.drawable.icon_cold_start_success)) + tvColdStartContent.text = resources.getString(R.string.cold_start_success_content) + connectColdStartTimer?.cancel() + hideColdStartView() + } + + /** + * 隐藏冷启动视图 + */ + private fun hideColdStartView(){ + UiThreadHandler.postDelayed({ + this@ColdStartView.visibility = View.GONE + coldStartResultListener?.coldStartSuccess() + }, 2000) + } + + /** + * 冷启动接管监听接口 + */ + interface ColdStartResultListener{ + fun coldStartSuccess() + fun coldStartFail() + } + + fun setColdStartResultListener(listener: ColdStartResultListener){ + coldStartResultListener = listener + } + } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_cold_start.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_cold_start.xml index 1da924a954..b9e400dd05 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_cold_start.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_cold_start.xml @@ -2,7 +2,9 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + android:background="#7F000000" + > + + + + + + - \ 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 f286b4bedd..99dcf87443 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 @@ -92,4 +92,6 @@ #131415 + #FFCD3D + \ 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 a219598048..6d5a785236 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 @@ -215,5 +215,15 @@ 域控连接状态图标 SSM连接状态图标 + 冷启动状态图标 + 已连接域控 + 系统启动中… + 系统启动成功 + 系统启动失败 + 正在连接SSM… + 已连接SSM + SSM连接异常,建议重启车辆并上报问题 + 系统启动成功,即将进入主页 + 系统启动异常,建议重启车辆并上报问题 diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/xml/key.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/xml/key.xml index 14d4d7cd13..52440aff37 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/xml/key.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/xml/key.xml @@ -2,7 +2,7 @@ diff --git a/core/function-impl/mogo-core-function-map/build.gradle b/core/function-impl/mogo-core-function-map/build.gradle index fc45801307..3f498788b7 100644 --- a/core/function-impl/mogo-core-function-map/build.gradle +++ b/core/function-impl/mogo-core-function-map/build.gradle @@ -61,8 +61,7 @@ dependencies { exclude group: 'com.zhidaoauto.machine', module: 'map' } -// implementation rootProject.ext.dependencies.mogocustommap - implementation project(':libraries:mapmodule') + implementation rootProject.ext.dependencies.mogocustommap implementation rootProject.ext.dependencies.amapnavi3dmap implementation rootProject.ext.dependencies.androidxroomruntime diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/chain/ChainConstant.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/chain/ChainConstant.kt index 7d1770f792..ceb4614e52 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/chain/ChainConstant.kt +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/chain/ChainConstant.kt @@ -96,6 +96,7 @@ class ChainConstant { const val CHAIN_CODE_MAIN_BLOCK = "CHAIN_CODE_MAIN_BLOCK" const val CHAIN_CODE_DISPATCH_RECEIVE = "CHAIN_CODE_DISPATCH_RECEIVE" const val CHAIN_CODE_DISPATCH_START = "CHAIN_CODE_DISPATCH_START" + const val CHAIN_CODE_REDIS_DATA_LOAD = "CHAIN_CODE_REDIS_DATA_LOAD" const val CHAIN_CODE_CLOUD_INIT = "CHAIN_CODE_CLOUD_INIT" const val CHAIN_CODE_CLOUD_PASSPORT_TOKEN = "CHAIN_CODE_CLOUD_PASSPORT_TOKEN" diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/enums/EventTypeEnumNew.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/enums/EventTypeEnumNew.kt index 5e7b615420..404155b7fd 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/enums/EventTypeEnumNew.kt +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/enums/EventTypeEnumNew.kt @@ -832,7 +832,7 @@ enum class EventTypeEnumNew( } TYPE_SOCKET_ROAD_CONGESTION.poiType -> R.raw.v2x_yongdu TYPE_SOCKET_ROAD_PEOPLE_CROSS.poiType -> if (FunctionBuildConfig.skinMode != 0) TrafficTypeEnum.TYPE_TRAFFIC_ID_PEOPLE.traffic3DIconId else TrafficTypeEnum.TYPE_TRAFFIC_ID_PEOPLE.traffic3DNightIconId - TYPE_SOCKET_ROAD_OTHER_RETROGRADE_VEHICLE.poiType -> if (FunctionBuildConfig.skinMode != 0) TrafficTypeEnum.TYPE_TRAFFIC_ID_TA_CHE.traffic3DIconId else TrafficTypeEnum.TYPE_TRAFFIC_ID_TA_CHE.traffic3DNightIconId + TYPE_SOCKET_ROAD_OTHER_RETROGRADE_VEHICLE.poiType -> if (FunctionBuildConfig.skinMode != 0) TrafficTypeEnum.TYPE_TRAFFIC_ID_TA_CHE_RETROGRADE.traffic3DIconId else TrafficTypeEnum.TYPE_TRAFFIC_ID_TA_CHE_RETROGRADE.traffic3DNightIconId else -> 0 } } diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/enums/TrafficTypeEnum.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/enums/TrafficTypeEnum.kt index ddc371b711..b3627550e7 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/enums/TrafficTypeEnum.kt +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/enums/TrafficTypeEnum.kt @@ -121,8 +121,18 @@ enum class TrafficTypeEnum( R.raw.v2x_shigu_sanjiaopai, R.raw.v2x_shigu_sanjiaopai, R.raw.v2x_shigu_sanjiaopai + ), + + TYPE_TRAFFIC_ID_TA_CHE_RETROGRADE( + 100062, + "他车逆行", + R.raw.traffic_tachexiaoche_retrograde, + R.raw.traffic_tachexiaoche_retrograde, + R.raw.traffic_tachexiaoche_retrograde ); + + companion object { @JvmStatic fun getType(type: Int): TrafficTypeEnum { diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/och/OchInfo.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/och/OchInfo.kt new file mode 100644 index 0000000000..57e04a8b2c --- /dev/null +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/och/OchInfo.kt @@ -0,0 +1,6 @@ +package com.mogo.eagle.core.data.och + +import com.mogo.eagle.core.data.map.MogoLocation + +// type 0-> 起终点坐标 坐标index 0 起点 坐标index 1 终点 +data class OchInfo(var type: Int, var latLonList: List) \ No newline at end of file diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/datacenter/IDataCenterBizListener.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/datacenter/IDataCenterBizListener.kt index d5d6feadd9..a438924c41 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/datacenter/IDataCenterBizListener.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/datacenter/IDataCenterBizListener.kt @@ -1,5 +1,8 @@ package com.mogo.eagle.core.function.api.datacenter +import com.mogo.eagle.core.data.map.MogoLocation +import com.mogo.eagle.core.data.och.OchInfo + interface IDataCenterBizListener { fun invokeLoginNo(loginNo:String?){} @@ -24,4 +27,5 @@ interface IDataCenterBizListener { fun invokeAutopilotOrderId(orderID:String){} + fun invokeOchInfo(ochInfo: OchInfo) {} } \ No newline at end of file diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutopilotStatisticsListenerManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutopilotStatisticsListenerManager.kt index 16129d8d48..73e0bf99da 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutopilotStatisticsListenerManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutopilotStatisticsListenerManager.kt @@ -30,7 +30,11 @@ object CallerAutopilotStatisticsListenerManager : CallerBase() { } } + fun invokeOchInfo(ochInfo: OchInfo) { + M_LISTENERS.forEach { + it.value.invokeOchInfo(ochInfo) + } + } + fun getOrderId(): String { return orderId } diff --git a/core/mogo-core-res/src/main/res/raw/traffic_tachexiaoche_retrograde.nt3d b/core/mogo-core-res/src/main/res/raw/traffic_tachexiaoche_retrograde.nt3d new file mode 100644 index 0000000000..e1fca4c1fc Binary files /dev/null and b/core/mogo-core-res/src/main/res/raw/traffic_tachexiaoche_retrograde.nt3d differ diff --git a/gradle.properties b/gradle.properties index aefb0029f3..f251ead5de 100644 --- a/gradle.properties +++ b/gradle.properties @@ -83,7 +83,7 @@ MOGO_TELEMATIC_VERSION=1.4.7.42 MOGO_SKIN_VERSION=1.4.7.48 ######## MogoAiCloudSDK Version ######## # 自研地图 -MAP_SDK_VERSION=3.4.1.2 +MAP_SDK_VERSION=3.4.1.13_alpha_7 MAP_SDK_DATA_VERSION=1.0.0.9 MAP_SDK_OPERATION_VERSION=1.1.4.1 # websocket diff --git a/libraries/mapmodule/src/main/assets/shaders/vMogo_Shader.glsl b/libraries/mapmodule/src/main/assets/shaders/vMogo_Shader.glsl index 20928bd7ea..fe34a6c685 100644 --- a/libraries/mapmodule/src/main/assets/shaders/vMogo_Shader.glsl +++ b/libraries/mapmodule/src/main/assets/shaders/vMogo_Shader.glsl @@ -111,10 +111,10 @@ void setLeadLine(){ } void setSignalLine(){ if(signalLineObj==1 && signalLineStep>0){ - _uv.x = (uv.x - 0.5)*signalScale + 0.5; //x方向缩放 + _uv.x = uv.x; _uv.y = uv.y; signalLineTexY = _uv.y; - _uv = _uv + vec2(0.0,1.0)*signalLineTime; + _uv = _uv + vec2(0.0,1.0); } } void setGuideLine(){ diff --git a/libraries/mapmodule/src/main/java/com/autonavi/nge/dm/NavigationCore.java b/libraries/mapmodule/src/main/java/com/autonavi/nge/dm/NavigationCore.java index 3a7aef377a..1eee05af19 100644 --- a/libraries/mapmodule/src/main/java/com/autonavi/nge/dm/NavigationCore.java +++ b/libraries/mapmodule/src/main/java/com/autonavi/nge/dm/NavigationCore.java @@ -1,4 +1,4 @@ -package com.autonavi.nge.dm;//package com.autonavi.nge.dm; +//package com.autonavi.nge.dm; // //import android.os.RemoteException; //import android.util.Log; diff --git a/libraries/mapmodule/src/main/java/com/autonavi/nge/guidance/GuidanceProvider.java b/libraries/mapmodule/src/main/java/com/autonavi/nge/guidance/GuidanceProvider.java index bc6c0d1985..92cf6d79de 100644 --- a/libraries/mapmodule/src/main/java/com/autonavi/nge/guidance/GuidanceProvider.java +++ b/libraries/mapmodule/src/main/java/com/autonavi/nge/guidance/GuidanceProvider.java @@ -1,4 +1,4 @@ -package com.autonavi.nge.guidance;//package com.autonavi.nge.guidance; +//package com.autonavi.nge.guidance; // //import android.util.Log; // diff --git a/libraries/mapmodule/src/main/java/com/autonavi/nge/hdmap/HDMapProvider.kt b/libraries/mapmodule/src/main/java/com/autonavi/nge/hdmap/HDMapProvider.kt index e35e4d45da..8284587670 100644 --- a/libraries/mapmodule/src/main/java/com/autonavi/nge/hdmap/HDMapProvider.kt +++ b/libraries/mapmodule/src/main/java/com/autonavi/nge/hdmap/HDMapProvider.kt @@ -10,11 +10,88 @@ class HDMapProvider { /**f:设置redis源。1,测试redis(42)。非1,正式redis(根据域名访问的)。默认,非1 */ @JvmStatic external fun setDataRedisSource(source: Int) + /** 是否开启地图数据调试信息的展示*/ + @JvmStatic external fun toggleMapDataDebugInfo(open: Boolean) + + /** 是否开启Systrace*/ + @JvmStatic external fun toggleSystrace(open: Boolean) + + /** + * 设置Redis数据加载回调 + */ + @JvmStatic external fun setRedisDataLoadCallback(callback: IRedisLoadCallback) + init { System.loadLibrary("hdmap") } } + interface IRedisLoadCallback { + /** + * 登录开始 + */ + fun onLoginStart(ip: String, port: Int, password: String, dbIndex: Int) { } + + /** + * 登录失败 + */ + fun onLoginFailed(error: String?) { } + + /** + * 登录成功 + */ + fun onLoginSuccess() { } + + /** + * 登录成功之后,重新开始登录 + * @param isCanRetry: true -> 可以再次重试; false-> 不可以再次重试 + */ + fun onReLogin(isCanRetry: Boolean) { } + + /** + * 请求 加载指定瓦片数据 开始 + * @param layerId: redis中指哈希表中的键 + * @param tileId: 要获取的指定瓦片ID的数据 + */ + fun onTileLoadStart(layerId: String, tileId: String) { } + + /** + * 请求加载瓦片数据成功 + * @param layerId: redis中指哈希表中的键 + * @param tileId: 要获取的指定瓦片ID的数据 + */ + fun onTileLoadSuccess(layerId: String, tileId: String) { } + + /** + * 请求加载瓦片数据失败 + * @param layerId: redis中指哈希表中的键 + * @param tileId: 要获取的指定瓦片ID的数据 + */ + fun onTileLoadFail(layerId: String, tileId: String, error: String) { } + + /** + * 请求同时加载多个瓦片数据开始 + * @param layerId: redis中指哈希表中的键 + * @param tileIds: 要获取的指定瓦片ID列表的集合 + */ + fun onTilesLoadStart(layerId: String, tileIds: List) { } + + /** + * 同时加载多个瓦片数据成功 + * @param layerId: redis中指哈希表中的键 + * @param tileIds: 要获取的指定瓦片ID列表的集合 + */ + fun onTilesLoadSuccess(layerId: String, tileIds: List) { } + + /** + * 同时加载多个瓦片数据失败 + * @param layerId: redis中指哈希表中的键 + * @param tileIds: 要获取的指定瓦片ID列表的集合 + * @param error: 加载失败的异常信息 + */ + fun onTilesLoadFail(layerId: String, tileIds: List, error: String?) { } + } + fun getLaneCenterLine(tileId: Int, routeId: Int): ArrayList? { return if (mObj != 0L) { getLaneCenterLineJni(mObj, tileId, routeId) diff --git a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/inner/abs/IMarkerController.kt b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/inner/abs/IMarkerController.kt index f8a0bda092..f742b9b079 100644 --- a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/inner/abs/IMarkerController.kt +++ b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/inner/abs/IMarkerController.kt @@ -27,7 +27,7 @@ interface IMarkerController { /** * 批量更新他车 */ - fun updateBatchMarkerPositon(batchMarkerOptions: com.zhidaoauto.map.sdk.open.renders.marker.BatchMarkerOptions) + fun updateBatchMarkerPositon(batchMarkerOptions: BatchMarkerOptions) //根据车辆类型预添加车辆模型 fun addPreVehicleModel(type:Int,modelRes:Int):String? //添加普通模型 diff --git a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/inner/road/RoadHelper.kt b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/inner/road/RoadHelper.kt index 7d4bf40d09..68d0ed0d36 100644 --- a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/inner/road/RoadHelper.kt +++ b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/inner/road/RoadHelper.kt @@ -93,6 +93,9 @@ class RoadHelper private constructor() { cacheHdDataProgressJob?.cancel() cacheHdDataProgressJob = null + mHdDataDownloadListener?.clear() + mHdDataDownloadListener = null + cancelCacheHDData() hdMapProvider.release() diff --git a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/renders/marker/MarkerSimpleData.kt b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/renders/marker/MarkerSimpleData.kt index 9347795496..76c509008e 100644 --- a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/renders/marker/MarkerSimpleData.kt +++ b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/renders/marker/MarkerSimpleData.kt @@ -26,6 +26,8 @@ class MarkerSimpleData { var color: String = "" //颜色设置类型 0 直接替换 1=由原色变为指定色 有方向 * 2=由指定色变为原色 有方向 * 3=由原色变为指定色 无方向 * 4=由指定色变为原色 无方向 var colorType: Int = 0 + // 变色角度 + var colorAngle:Int = 0 //文本 var text: String = "" //状态 diff --git a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/view/MapAutoView.kt b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/view/MapAutoView.kt index fc13a88e29..29e8eee444 100644 --- a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/view/MapAutoView.kt +++ b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/view/MapAutoView.kt @@ -341,16 +341,17 @@ open class MapAutoView : FrameLayout, LonLatPointListener, ITraffic,ILockLocatio mEventController = MapEventController() } - mMapView?.let { + mMapView?.let { itx -> if (CompileConfig.DEBUG) { Log.i(TAG, "autoop-mapop-create--${mMapView}") } - it.setEventController(mEventController) - addView(it) + itx.setEventController(mEventController) + addView(itx) + Log.d(TAG, "--- controller assign -->") mMapController = - MapController(context, it, this@MapAutoView, mEventController, mMapStyleParams) - + MapController(context, itx, this@MapAutoView, mEventController, mMapStyleParams) + locationClient?.takeIf { it.mMapController == null }?.also { it.mMapController = mMapController } mMapController?.let { mapController -> mMarkerController = MarkerController(mapController) mapController.setMarkerController(mMarkerController) @@ -358,8 +359,8 @@ open class MapAutoView : FrameLayout, LonLatPointListener, ITraffic,ILockLocatio mLocationView = LocationHelper(context, mMarkerController, mMapController,mMapStyleParams) mMapController?.setLocalView(mLocationView) - it.setMapController(mMapController) - it.mITraffic = this@MapAutoView + itx.setMapController(mMapController) + itx.mITraffic = this@MapAutoView // init PanelManager mPanelManager = PanelManager(this@MapAutoView, context, mMapController) } diff --git a/libraries/mogo-map/build.gradle b/libraries/mogo-map/build.gradle index 7b57b96c6b..e1936b73bb 100644 --- a/libraries/mogo-map/build.gradle +++ b/libraries/mogo-map/build.gradle @@ -51,8 +51,7 @@ dependencies { implementation rootProject.ext.dependencies.arouter kapt rootProject.ext.dependencies.aroutercompiler // 高精地图 -// implementation rootProject.ext.dependencies.mogocustommap - implementation project(':libraries:mapmodule') + implementation rootProject.ext.dependencies.mogocustommap // 高德地图 api rootProject.ext.dependencies.amapnavi3dmap diff --git a/settings.gradle b/settings.gradle index 5f7182469d..9c5912d8a4 100644 --- a/settings.gradle +++ b/settings.gradle @@ -44,7 +44,7 @@ include ':libraries:mogo-map' include ':libraries:mogo-adas' include ':libraries:mogo-adas-data' include ':libraries:mogo-obu' -include ':libraries:mapmodule' +//include ':libraries:mapmodule' // 语音 include ':tts:tts-base'