[fea]
[皮肤信息]
This commit is contained in:
yangyakun
2024-10-25 16:47:28 +08:00
parent 4358b32a7c
commit bf2659d6e2
9 changed files with 286 additions and 27 deletions

View File

@@ -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<SkinRespBean>{
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
}
}

View File

@@ -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
}
}
}

View File

@@ -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
* <p>
* 网约车-出租车接口定义
*/
interface OchSkinServiceApi {
@Headers({"Content-type:application/json;charset=UTF-8"})
@GET("/och-vehicle/api/resource/queryBySn")
Observable<SkinRespBean> querySkinBysn(@Header("appId") String appId
, @Header("ticket") String ticket, @Query("sn") String sn);
}

View File

@@ -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<SkinRespBean>?
) {
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))
}
}

View File

@@ -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()
}
}

View File

@@ -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()
}

View File

@@ -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"

View File

@@ -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)
}

View File

@@ -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? {