diff --git a/OCH/common/biz/src/main/java/com/mogo/och/biz/skin/SkinProvider.kt b/OCH/common/biz/src/main/java/com/mogo/och/biz/skin/SkinProvider.kt new file mode 100644 index 0000000000..80e0dd154f --- /dev/null +++ b/OCH/common/biz/src/main/java/com/mogo/och/biz/skin/SkinProvider.kt @@ -0,0 +1,99 @@ +package com.mogo.och.biz.skin + +import android.content.Context +import com.alibaba.android.arouter.facade.annotation.Route +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d +import com.mogo.och.biz.R +import com.mogo.och.biz.skin.bean.SkinRespBean +import com.mogo.och.biz.skin.net.OchSkinServiceManager +import com.mogo.och.common.module.biz.skin.SkinService +import com.mogo.och.common.module.constant.OchCommonConst +import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager +import com.mogo.och.common.module.network.OchCommonServiceCallback +import com.mogo.och.common.module.utils.RxUtils +import com.mogo.skin.Skin +import com.mogo.skin.SkinManager +import com.mogo.skin.utils.FileUtils + +@Route(path = OchCommonConst.BIZ_SKIN) +class SkinProvider : SkinService { + + private var context: Context?= null + + private val TAG = "SkinProvider" + + override fun loadNewSkin() { + OchChainLogManager.writeChainLogSkin("皮肤信息","请求皮肤信息") + context?.let{ + OchSkinServiceManager.querySkinBysn(it,object : OchCommonServiceCallback{ + override fun onSuccess(data: SkinRespBean?) { + OchChainLogManager.writeChainLogSkin("皮肤信息","请求皮肤信息成功:${data}") + if (null != data && 0 == data.code) { + if(data.data==null){ + SkinManager.getInstance().loadSkin("") + OchChainLogManager.writeChainLogSkin("皮肤信息", "皮肤还原成功") + }else { + data.data?.let { skinInfo -> + if(skinInfo.empty()){ + SkinManager.getInstance().loadSkin("") + OchChainLogManager.writeChainLogSkin("皮肤信息", "皮肤还原成功") + return + } + val skin = Skin( + skinInfo.md5, + skinInfo.name, + skinInfo.url + ) + //换肤 + SkinManager.getInstance().downloadSkin(it, skin, object : + SkinManager.SkinLoadListener { + override fun onLoadSuccess() { + //MogoAnalyticUtils.track() + d(TAG, "皮肤下载成功……开始解压Raw下的视频") + OchChainLogManager.writeChainLogSkin( + "皮肤信息", + "加载皮肤成功:${data}" + ) + FileUtils.copyVideoRawToFile(it, R.raw::class.java.fields) + } + + override fun onLoadFailed(e: java.lang.Exception?) { + OchChainLogManager.writeChainLogSkin( + "皮肤信息", + "加载皮肤失败:${e}" + ) + RxUtils.createSubscribe(5_000) { + loadNewSkin() + } + } + }) + } + } + } + } + + override fun onError() { + super.onError() + OchChainLogManager.writeChainLogSkin("皮肤信息","请求皮肤信息网络失败5s后重试") + RxUtils.createSubscribe(5_000) { + loadNewSkin() + } + } + + override fun onFail(code: Int, msg: String?) { + OchChainLogManager.writeChainLogSkin("皮肤信息","请求皮肤信息失败code:${code} msg:${msg} 5s后重试") + RxUtils.createSubscribe(5_000) { + loadNewSkin() + } + } + + }) + } + + } + + override fun init(context: Context?) { + this.context = context + } + +} \ No newline at end of file diff --git a/OCH/common/biz/src/main/java/com/mogo/och/biz/skin/bean/SkinRespBean.kt b/OCH/common/biz/src/main/java/com/mogo/och/biz/skin/bean/SkinRespBean.kt new file mode 100644 index 0000000000..097e938c18 --- /dev/null +++ b/OCH/common/biz/src/main/java/com/mogo/och/biz/skin/bean/SkinRespBean.kt @@ -0,0 +1,25 @@ +package com.mogo.och.biz.skin.bean + +import com.mogo.eagle.core.data.BaseData +import com.mogo.och.common.module.biz.login.LoginInfo + +/** + * Created by pangfan on 2021/8/19 + * + * 状态查询返回数据结构 + */ +data class SkinRespBean(var data: Result?) : BaseData() { + data class Result( + var id: Long, + var name: String?, + var url: String?, + var md5: String?, + ) { + fun empty(): Boolean { + if(id<=0||name.isNullOrEmpty()||url.isNullOrEmpty()||md5.isNullOrEmpty()){ + return true + } + return false + } + } +} diff --git a/OCH/common/biz/src/main/java/com/mogo/och/biz/skin/net/OchSkinServiceApi.java b/OCH/common/biz/src/main/java/com/mogo/och/biz/skin/net/OchSkinServiceApi.java new file mode 100644 index 0000000000..9a9a93c4bc --- /dev/null +++ b/OCH/common/biz/src/main/java/com/mogo/och/biz/skin/net/OchSkinServiceApi.java @@ -0,0 +1,31 @@ +package com.mogo.och.biz.skin.net; + +import com.mogo.eagle.core.data.BaseData; +import com.mogo.och.biz.login.bean.DriverStatusQueryRespBean; +import com.mogo.och.biz.login.bean.TaxiLoginReqBean; +import com.mogo.och.biz.login.bean.TaxiLoginRespBean; +import com.mogo.och.biz.login.bean.TaxiLoginSmsReqBean; +import com.mogo.och.biz.login.bean.TaxiLogoutReqBean; +import com.mogo.och.biz.skin.bean.SkinRespBean; + +import io.reactivex.Observable; +import retrofit2.http.Body; +import retrofit2.http.GET; +import retrofit2.http.Header; +import retrofit2.http.Headers; +import retrofit2.http.POST; +import retrofit2.http.Query; + +/** + * Created by pangfan on 2021/8/19 + *

+ * 网约车-出租车接口定义 + */ +interface OchSkinServiceApi { + + @Headers({"Content-type:application/json;charset=UTF-8"}) + @GET("/och-vehicle/api/resource/queryBySn") + Observable querySkinBysn(@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/skin/net/OchSkinServiceManager.kt b/OCH/common/biz/src/main/java/com/mogo/och/biz/skin/net/OchSkinServiceManager.kt new file mode 100644 index 0000000000..6fe37da62c --- /dev/null +++ b/OCH/common/biz/src/main/java/com/mogo/och/biz/skin/net/OchSkinServiceManager.kt @@ -0,0 +1,58 @@ +package com.mogo.och.biz.skin.net + +import android.content.Context +import com.mogo.cloud.passport.MoGoAiCloudClientConfig +import com.mogo.commons.storage.SharedPrefsMgr +import com.mogo.eagle.core.data.config.FunctionBuildConfig +import com.mogo.eagle.core.network.MoGoRetrofitFactory +import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.och.biz.login.bean.DriverStatusQueryRespBean +import com.mogo.och.biz.skin.bean.SkinRespBean +import com.mogo.och.common.module.biz.lansocket.LoginLanPassengerSocket +import com.mogo.och.common.module.constant.OchCommonConst +import com.mogo.och.common.module.manager.cache.OchSPManager +import com.mogo.och.common.module.network.OchCommonServiceCallback +import com.mogo.och.common.module.network.OchCommonSubscribeImpl +import com.mogo.och.common.module.network.interceptor.transformTry + +object OchSkinServiceManager { + + private const val TAG = "OchCommonServiceManager" + + private val ochSkinService: OchSkinServiceApi by lazy { + MoGoRetrofitFactory.getInstance(OchCommonConst.getBaseUrl()).create( + OchSkinServiceApi::class.java + ) + } + + + /** + * 接单状态和登录状态查询 + * + * @param context + * @param callback + */ + @JvmStatic + fun querySkinBysn( + context: Context, + callback: OchCommonServiceCallback? + ) { + CallerLogger.d(TAG, "queryDriverServiceStatus:查询登录状态"); + val sn = + if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) { + OchSPManager.getSn() + } else{ + LoginLanPassengerSocket.driverSn + } + + ochSkinService.querySkinBysn( + MoGoAiCloudClientConfig.getInstance().serviceAppId, + SharedPrefsMgr.getInstance().token, + sn + ).transformTry() + .subscribe(OchCommonSubscribeImpl(context, callback, "querySkinBysn",false)) + + } + +} \ No newline at end of file diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/skin/SkinManager.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/skin/SkinManager.kt new file mode 100644 index 0000000000..8e2a17486f --- /dev/null +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/skin/SkinManager.kt @@ -0,0 +1,51 @@ +package com.mogo.och.common.module.biz.skin + +import com.alibaba.android.arouter.launcher.ARouter +import com.mogo.eagle.core.data.config.FunctionBuildConfig +import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils +import com.mogo.och.common.module.biz.lansocket.IOchLanPassengerStatusListener +import com.mogo.och.common.module.biz.lansocket.LoginLanPassengerSocket +import com.mogo.och.common.module.constant.OchCommonConst +import com.mogo.och.common.module.manager.cache.OchSPManager +import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager +import com.mogo.och.common.module.utils.RxUtils + +object SkinManager : IOchLanPassengerStatusListener { + + private val TAG = "SkinManager" + + private var skinService: SkinService? = + ARouter.getInstance().build(OchCommonConst.BIZ_SKIN).navigation() as SkinService + + + init { + if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) { + LoginLanPassengerSocket.addListener(TAG,this) + } + } + fun load(){ + OchChainLogManager.writeChainLogInit("初始化信息","初始化皮肤信息") + loadNewSkin() + } + + private fun loadNewSkin(){ + if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) { + val driverSn = OchSPManager.getSn() + if(driverSn.isNullOrEmpty()){ + OchChainLogManager.writeChainLogSkin("司机皮肤信息","没有sn 需要等待5s再去请求") + RxUtils.createSubscribe(5_000) { + skinService?.loadNewSkin() + } + }else{ + skinService?.loadNewSkin() + } + } else{ + skinService?.loadNewSkin() + } + } + + override fun onDriverSnChagneListner(sn: String?) { + OchChainLogManager.writeChainLogSkin("乘客皮肤信息","司机屏sn变化 重新加载皮肤") + skinService?.loadNewSkin() + } +} \ No newline at end of file diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/skin/SkinService.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/skin/SkinService.kt new file mode 100644 index 0000000000..b85a772ebd --- /dev/null +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/skin/SkinService.kt @@ -0,0 +1,9 @@ +package com.mogo.och.common.module.biz.skin + +import com.alibaba.android.arouter.facade.template.IProvider + +interface SkinService : IProvider { + + fun loadNewSkin() + +} \ No newline at end of file diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/constant/OchCommonConst.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/constant/OchCommonConst.kt index a57266e728..c6cb524183 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/constant/OchCommonConst.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/constant/OchCommonConst.kt @@ -29,6 +29,7 @@ class OchCommonConst { const val WAIT_TAKEN = 100046 const val BIZ_LOGIN = "/ochbiz/common/login" + const val BIZ_SKIN = "/ochbiz/common/skin" const val BUS_DRIVER = "/busdriver/busdriver" const val BUS_PASSENGER = "/buspassenger/buspassenger" 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 a62dd8509c..1ce5e50cda 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 @@ -39,6 +39,8 @@ object OchChainLogManager { // 初始化信息 const val EVENT_KEY_INFO_INIT = "event_key_och_init" + // 初始化信息 + const val EVENT_KEY_INFO_SKIN = "event_key_och_skin" // 局域网内socket 通讯 const val EVENT_KEY_INFO_SOCKET = "analytics_event_och_track_screen_msg" @@ -84,6 +86,11 @@ object OchChainLogManager { fun writeChainLogInit(title: String, info: String) { writeChainLog(title,info,true,EVENT_KEY_INFO_INIT) } + + fun writeChainLogSkin(title: String, info: String) { + writeChainLog(title,info,true,EVENT_KEY_INFO_SKIN) + } + fun writeChainLogNetLanSocketConnect(title: String, info: String){ writeChainLog(title,info,true,EVENT_KEY_INFO_SOCKET_CONNECT) } diff --git a/OCH/facade/src/main/java/com/mogo/och/facade/route/FacadeProvider.kt b/OCH/facade/src/main/java/com/mogo/och/facade/route/FacadeProvider.kt index 3e703e35ac..c823257bd1 100644 --- a/OCH/facade/src/main/java/com/mogo/och/facade/route/FacadeProvider.kt +++ b/OCH/facade/src/main/java/com/mogo/och/facade/route/FacadeProvider.kt @@ -36,12 +36,10 @@ 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.provider.CommonService +import com.mogo.och.common.module.biz.skin.SkinManager import com.mogo.och.common.module.constant.OchCommonConst import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager -import com.mogo.skin.Skin -import com.mogo.skin.SkinManager -import com.mogo.skin.SkinManager.SkinLoadListener -import com.mogo.skin.utils.FileUtils + import me.jessyan.autosize.utils.AutoSizeUtils /** @@ -58,29 +56,9 @@ abstract class FacadeProvider : IMoGoFunctionProvider, ILoginCallback { override fun init(context: Context) { d(TAG, "FacadeProvider:init__${ProcessUtils.getCurrentProcessName()}_$this") LoginStatusManager.addListener(TAG, this) - // TODO yangyakun 根据后台配置的用户租户对应的皮肤包进行下载换肤 - val skin = Skin( - "ee3e1b0ed6e33a51366949294b07787d", - "YiXin-skin_v1_2024_10_25.zip", - "https://carlife-static-1255510688.cos.ap-beijing.myqcloud.com/MoGoEagleEye/YiXin-skin_v1_2024_10_25.zip" - ) - val skinDeQing = Skin( - "a841e8819f06cfefa646f7adc697e070", - "DeQing-skin_v1_2024_10_25.zip", - "https://carlife-static-1255510688.cos.ap-beijing.myqcloud.com/MoGoEagleEye/DeQing-skin_v1_2024_10_25.zip" - ) - //换肤 - SkinManager.getInstance().downloadSkin(Utils.getApp(), skin, object : SkinLoadListener { - override fun onLoadSuccess() { - //MogoAnalyticUtils.track() - d(TAG,"皮肤下载成功……开始解压Raw下的视频") - FileUtils.copyVideoRawToFile(Utils.getApp(), R.raw::class.java.fields) - } - - override fun onLoadFailed(e: java.lang.Exception?) { - - } - }) + if(ProjectUtils.isSaas()) { + SkinManager.load() + } } override fun createCoverage(fragmentActivity: FragmentActivity?, integer: Int?): Fragment? {