[6.7.0][工具箱] refactor: ToolKitDataManager 监听登录/登出 来初始化和反初始化(依赖车型和业务模式的切换);

refactor: 增加方法调用日志打 & 避免多次重复初始化;
This commit is contained in:
aibingbing
2024-09-26 17:54:44 +08:00
parent a665332bec
commit e680c485ec
3 changed files with 62 additions and 10 deletions

View File

@@ -17,7 +17,6 @@ import com.mogo.eagle.core.function.hmi.bone.toolkit.ToolKitListDiffCallback
import com.mogo.eagle.core.function.hmi.bone.toolkit.ToolKitViewModel
import com.mogo.eagle.core.utilcode.mogo.logger.Logger
import com.mogo.eagle.core.utilcode.mogo.view.GridSpacingItemDecoration
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import kotlinx.android.synthetic.main.view_tool_kit_tab.view.recyclerView
import me.jessyan.autosize.utils.AutoSizeUtils
@@ -77,6 +76,6 @@ class ToolKitTabView @JvmOverloads constructor(
result.dispatchUpdatesTo(adapter)
}.also { observer = it })
context?.also { ToolKitDataManager.checkAndAddRomaItem(it) }
context?.also { ToolKitDataManager.addItemDependOnFunctionBuildConfig(it) }
}
}

View File

@@ -12,17 +12,19 @@ import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.function.api.och.toolkit.IToolKitItemClickListener
import com.mogo.eagle.core.function.api.och.toolkit.ToolKitCustomItemAddParam
import com.mogo.eagle.core.function.api.och.toolkit.ToolKitDefaultItemAddParam
import com.mogo.eagle.core.function.api.order.IOrderListener
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager
import com.mogo.eagle.core.function.call.order.CallerOrderListenerManager
import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.function.hmi.bone.toolkit.custom.ToolDriverRomaView
import com.mogo.eagle.core.function.hmi.bone.toolkit.custom.ToolRestartSystemView
import com.mogo.eagle.core.function.hmi.bone.toolkit.custom.ToolStopServiceView
import com.mogo.eagle.core.function.hmi.ui.setting.SopView
import com.mogo.eagle.core.function.hmi.ui.setting.ToggleDebugView
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
import com.mogo.eagle.core.utilcode.mogo.logger.Logger
import com.mogo.eagle.core.utilcode.util.ActivityUtils
import com.mogo.eagle.core.utilcode.util.AppStateManager
import com.mogo.eagle.core.utilcode.util.NetworkUtils
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.zhjt.mogo_core_function_devatools.badcase.biz.AIDataCollectWindow
@@ -30,7 +32,7 @@ import com.zhjt.mogo_core_function_devatools.badcase.consts.BadCaseConfig
import java.util.concurrent.ConcurrentHashMap
import kotlin.system.exitProcess
object ToolKitDataManager : IToolKitItemClickListener {
object ToolKitDataManager : IToolKitItemClickListener, IOrderListener {
const val TAG = "ToolKitDataManager"
enum class ToolTypeEnum {
@@ -50,6 +52,8 @@ object ToolKitDataManager : IToolKitItemClickListener {
val toolList = ArrayList<ToolKitBean>()
private var hasInit = false
fun addListener(tag: String, listener: IToolKitItemClickListener) {
if (listeners.containsKey(tag)) {
return
@@ -62,9 +66,17 @@ object ToolKitDataManager : IToolKitItemClickListener {
}
fun init(ctx: Context) {
Logger.i(TAG, "init")
if (!AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
Logger.i(TAG, "init, 不是司机屏,跳过")
return
}
if (hasInit) {
Logger.i(TAG, "init, hasInit=$hasInit 跳过")
return
}
// 注册登录/登出 监听
CallerOrderListenerManager.addListener(TAG, this)
// 添加默认的工具箱items
toolList.also {
it += ToolKitBean(
@@ -102,8 +114,8 @@ object ToolKitDataManager : IToolKitItemClickListener {
getDefaultItemView(ctx, "上报", R.drawable.icon_toolkit_item_ai_report)
)
}
// 漫游
checkAndAddRomaItem(ctx)
// 依赖FunctionBuildConfig设置后判断才能添加的item放这里添加
addItemDependOnFunctionBuildConfig(ctx)
addListener(TAG, this)
kotlin.runCatching {
@@ -111,14 +123,18 @@ object ToolKitDataManager : IToolKitItemClickListener {
?: throw IllegalStateException("ctx: $ctx is a instance of ViewModelStoreOwner.")
viewModel = ViewModelProvider(owner).get(ToolKitViewModel::class.java)
}
hasInit = true
}
fun unInit() {
Logger.i(TAG, "unInit")
if (!AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
Logger.i(TAG, "unInit, 不是司机屏, 跳过")
return
}
removeListener(TAG)
toolList.clear()
hasInit = false
}
/**
@@ -207,10 +223,10 @@ object ToolKitDataManager : IToolKitItemClickListener {
}
/**
* ToolKitDataManager基于调用方调用时机可能会很早FunctionBuildConfig里数据可能还没设置好在view加载
* 时在检查一次
* ToolKitDataManager基于调用方调用时机可能会很早有些item添加是需要根据当前车型、业务模式、项目判断后才能添加
* 依赖FunctionBuildConfig在登录后的设置这些工具Item 在view加载时再检查一次
*/
fun checkAndAddRomaItem(ctx: Context) {
fun addItemDependOnFunctionBuildConfig(ctx: Context) {
if (toolList.map { it.toolTag }.contains(ToolTypeEnum.ROMA.name)) {
Logger.i(TAG, "checkAndAddRomaItem 已经添加 跳过")
return
@@ -247,6 +263,10 @@ object ToolKitDataManager : IToolKitItemClickListener {
toolTags: Set<String>
) {
Logger.i(TAG, "invokeAddSingleToolKitDefaultItem, param=$param")
if (!AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
Logger.i(TAG, "invokeAddSingleToolKitDefaultItem, 不是司机屏, 跳过")
return
}
if (toolTags.contains(param.toolTag)) {
Logger.i(TAG, "invokeAddSingleToolKitDefaultItem, 重复的toolTag, 不执行添加")
return
@@ -265,6 +285,10 @@ object ToolKitDataManager : IToolKitItemClickListener {
list: ArrayList<ToolKitDefaultItemAddParam>
) {
Logger.i(TAG, "invokeAddMultiToolKitDefaultItem, size=${list.size}")
if (!AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
Logger.i(TAG, "invokeAddMultiToolKitDefaultItem, 不是司机屏, 跳过")
return
}
val toolTags = getToolKitTags()
synchronized(toolList) {
list.forEach {
@@ -280,6 +304,10 @@ object ToolKitDataManager : IToolKitItemClickListener {
toolTags: Set<String>
) {
Logger.i(TAG, "invokeAddSingleToolKitCustomItem, param=$param")
if (!AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
Logger.i(TAG, "invokeAddSingleToolKitCustomItem, 不是司机屏, 跳过")
return
}
if (toolTags.contains(param.toolTag)) {
Logger.i(TAG, "invokeAddSingleToolKitCustomItem, 重复的toolTag, 不执行添加")
return
@@ -298,6 +326,10 @@ object ToolKitDataManager : IToolKitItemClickListener {
list: ArrayList<ToolKitCustomItemAddParam>
) {
Logger.i(TAG, "invokeAddMultiToolKitCustomItem, size=${list.size}")
if (!AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
Logger.i(TAG, "invokeAddMultiToolKitCustomItem, 不是司机屏, 跳过")
return
}
val toolTags = getToolKitTags()
synchronized(toolList) {
list.forEach {
@@ -308,10 +340,19 @@ object ToolKitDataManager : IToolKitItemClickListener {
}
fun invokeGetToolkitAllTags(): Set<String> {
Logger.i(TAG, "invokeGetToolkitAllTags")
if (!AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
Logger.i(TAG, "invokeGetToolkitAllTags, 不是司机屏, 返回空")
return emptySet()
}
return getToolKitTags()
}
fun invokeRemoveToolkitByTag(toolTagList: List<String>) {
// if (!AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
// Logger.i(TAG, "invokeRemoveToolkitByTag, 不是司机屏, 跳过")
// return
// }
// val defaultToolTags = ToolTypeEnum.values().map { it.name }
// synchronized(toolList) {
// val targetList = toolList.filter { !defaultToolTags.contains(it.toolTag) && toolTagList.contains(it.toolTag) }
@@ -319,4 +360,16 @@ object ToolKitDataManager : IToolKitItemClickListener {
// viewModel?.updateToolKitData(ArrayList<ToolKitBean>(toolList))
// }
}
override fun onLoginStatusUpdate(isLogin: Boolean) {
super.onLoginStatusUpdate(isLogin)
Logger.i(TAG, "onLoginStatusUpdate isLogin=$isLogin")
if (!isLogin) {
unInit()
} else {
AppStateManager.currentActivity()?.also {
init(it)
}
}
}
}

View File

@@ -32,7 +32,7 @@ class ToolKitListAdapter(var items: List<ToolKitBean>) :
(it.parent as ViewGroup).removeView(it)
}
holder.containerView.addView(it)
it.setOnClickListener(object : OnPreventFastClickListener(500L) {
it.setOnClickListener(object : OnPreventFastClickListener(300L) {
override fun onClickImpl(v: View?) {
ToolKitDataManager.invokeItemClick(
data.toolTag,