[6.7.0]fix: code conflict ;

This commit is contained in:
aibingbing
2024-09-23 20:25:15 +08:00
parent 0376d062b8
commit 5440b40dab
15 changed files with 571 additions and 79 deletions

View File

@@ -7,6 +7,7 @@ import android.view.View
import androidx.constraintlayout.widget.ConstraintLayout
import com.mogo.eagle.core.data.enums.Carmodel
import com.mogo.eagle.core.function.api.och.IOchFunctionCall
import com.mogo.eagle.core.function.api.och.IOchFunctionCallNotify
import com.mogo.eagle.core.function.call.och.CallerOchFunctionCallManager
import com.mogo.eagle.core.function.hmi.R
import kotlinx.android.synthetic.main.view_bone_container.view.clBoneBiz
@@ -17,7 +18,7 @@ class BoneContainerView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : ConstraintLayout(context, attrs, defStyleAttr), IOchFunctionCall {
) : ConstraintLayout(context, attrs, defStyleAttr), IOchFunctionCallNotify {
companion object{
private const val TAG = "BoneContainerView"
@@ -54,13 +55,13 @@ class BoneContainerView @JvmOverloads constructor(
this.logOut = logOut
}
override fun invokeCarMode(carModel: Carmodel?) {
super.invokeCarMode(carModel)
override fun notifyCarMode(carModel: Carmodel?) {
super.notifyCarMode(carModel)
clBoneTab.setCarMode(carModel)
}
override fun invokePlateNumber(plateNumber: String?) {
super.invokePlateNumber(plateNumber)
override fun notifyPlateNumber(plateNumber: String?) {
super.notifyPlateNumber(plateNumber)
clBoneTab.setCarNo(plateNumber)
}
}

View File

@@ -3,22 +3,23 @@ package com.mogo.eagle.core.function.hmi.bone.tab
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.View
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.findViewTreeViewModelStoreOwner
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.GridLayoutManager
import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.function.hmi.bone.toolkit.ToolKitBean
import com.mogo.eagle.core.function.hmi.bone.toolkit.ToolKitDataManager
import com.mogo.eagle.core.function.hmi.bone.toolkit.ToolKitDefaultItemView
import com.mogo.eagle.core.function.hmi.bone.toolkit.ToolKitListAdapter
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 kotlinx.coroutines.flow.asFlow
import me.jessyan.autosize.utils.AutoSizeUtils
import java.lang.ref.WeakReference
class ToolKitTabView @JvmOverloads constructor(
context: Context,
@@ -31,6 +32,7 @@ class ToolKitTabView @JvmOverloads constructor(
}
private var viewModel: ToolKitViewModel? = null
private var observer: Observer<ArrayList<ToolKitBean>>? = null
init {
LayoutInflater.from(context).inflate(R.layout.view_tool_kit_tab, this, true)
@@ -43,6 +45,9 @@ class ToolKitTabView @JvmOverloads constructor(
override fun onDetachedFromWindow() {
super.onDetachedFromWindow()
kotlin.runCatching {
observer?.also { viewModel?.toolKitList?.removeObserver(it) }
}
}
private fun initView() {
@@ -59,12 +64,17 @@ class ToolKitTabView @JvmOverloads constructor(
false
)
)
viewModel = findViewTreeViewModelStoreOwner()?.let {
Logger.d(TAG, "findViewTreeViewModelStoreOwner instance=$it")
ViewModelProvider(it).get(ToolKitViewModel::class.java)
}
viewModel?.toolKitList?.observeForever { data ->
viewModel?.toolKitList?.observeForever(Observer<ArrayList<ToolKitBean>> { data ->
Logger.d(TAG, "new list size== ${data.size}")
val old = adapter.items
val result = DiffUtil.calculateDiff(ToolKitListDiffCallback(old, data))
adapter.items = data
adapter.notifyDataSetChanged()
}
result.dispatchUpdatesTo(adapter)
}.also { observer = it })
}
}

View File

@@ -5,9 +5,13 @@ import android.content.Intent
import android.os.Process
import android.view.View
import androidx.fragment.app.FragmentActivity
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.ViewModelStoreOwner
import com.mogo.commons.env.ProjectUtils
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.function.api.och.IToolKitItemClickListener
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.call.devatools.CallerDevaToolsManager
import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.function.hmi.bone.toolkit.custom.ToolDriverRomaView
@@ -16,6 +20,7 @@ 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.NetworkUtils
import com.mogo.eagle.core.utilcode.util.ToastUtils
@@ -27,7 +32,6 @@ import kotlin.system.exitProcess
object ToolKitDataManager : IToolKitItemClickListener {
const val TAG = "ToolKitDataManager"
enum class ToolTypeEnum {
DEBUG_PANEL, //调试面板
OPERATION_PANEL, //运营面板
@@ -41,6 +45,8 @@ object ToolKitDataManager : IToolKitItemClickListener {
private val listeners by lazy { ConcurrentHashMap<String, IToolKitItemClickListener>() }
private var viewModel: ToolKitViewModel? = null
val toolList = ArrayList<ToolKitBean>()
fun addListener(tag: String, listener: IToolKitItemClickListener) {
@@ -54,12 +60,6 @@ object ToolKitDataManager : IToolKitItemClickListener {
listeners.remove(tag)
}
fun invokeItemClick(toolTag: String, ctx: Context?) {
listeners.values.forEach { itx ->
itx.onItemClick(toolTag, ctx)
}
}
fun init(ctx: Context) {
if (!AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
return
@@ -111,6 +111,12 @@ object ToolKitDataManager : IToolKitItemClickListener {
}
}
addListener(TAG, this)
kotlin.runCatching {
val owner = ctx as? ViewModelStoreOwner
?: throw IllegalStateException("ctx: $ctx is a instance of ViewModelStoreOwner.")
viewModel = ViewModelProvider(owner).get(ToolKitViewModel::class.java)
}
}
fun unInit() {
@@ -124,9 +130,9 @@ object ToolKitDataManager : IToolKitItemClickListener {
/**
* 生成默认风格的工具item view(上面icon, 下面名称)
*/
private fun getDefaultItemView(context: Context, toolName: String, drawableId: Int): View {
private fun getDefaultItemView(context: Context, toolTitle: String, drawableId: Int): View {
return ToolKitDefaultItemView(context).apply {
setData(toolName, drawableId)
setData(toolTitle, drawableId)
}
}
@@ -204,4 +210,94 @@ object ToolKitDataManager : IToolKitItemClickListener {
}
}
}
fun invokeItemClick(toolTag: String, ctx: Context?) {
listeners.values.forEach { itx ->
itx.onItemClick(toolTag, ctx)
}
}
private fun getToolKitTags(): Set<String> {
synchronized(toolList) {
return toolList.map { it.toolTag }.toSet()
}
}
private fun invokeAddSingleToolKitDefaultItem(
ctx: Context,
param: ToolKitDefaultItemAddParam,
toolTags: Set<String>
) {
Logger.i(TAG, "invokeAddSingleToolKitDefaultItem, param=$param")
if (toolTags.contains(param.toolTag)) {
Logger.i(TAG, "invokeAddSingleToolKitDefaultItem, 重复的toolTag, 不执行添加")
return
}
val position =
if (param.position < 1) 0 else if (param.position > toolTags.size) toolTags.size - 1 else param.position - 1
val bean = ToolKitBean(
param.toolTag,
getDefaultItemView(ctx, param.toolTitle, param.toolDrawableIcon)
)
toolList.add(position, bean)
}
fun invokeAddMultiToolKitDefaultItem(
ctx: Context,
list: ArrayList<ToolKitDefaultItemAddParam>
) {
Logger.i(TAG, "invokeAddMultiToolKitDefaultItem, size=${list.size}")
val toolTags = getToolKitTags()
synchronized(toolList) {
list.forEach {
invokeAddSingleToolKitDefaultItem(ctx, it, toolTags)
}
viewModel?.updateToolKitData(toolList)
}
}
private fun invokeAddSingleToolKitCustomItem(
ctx: Context,
param: ToolKitCustomItemAddParam,
toolTags: Set<String>
) {
Logger.i(TAG, "invokeAddSingleToolKitCustomItem, param=$param")
if (toolTags.contains(param.toolTag)) {
Logger.i(TAG, "invokeAddSingleToolKitCustomItem, 重复的toolTag, 不执行添加")
return
}
val position =
if (param.position < 1) 0 else if (param.position > toolTags.size) toolTags.size - 1 else param.position - 1
val bean = ToolKitBean(
param.toolTag,
param.customView
)
toolList.add(position, bean)
}
fun invokeAddMultiToolKitCustomItem(
ctx: Context,
list: ArrayList<ToolKitCustomItemAddParam>
) {
Logger.i(TAG, "invokeAddMultiToolKitCustomItem, size=${list.size}")
val toolTags = getToolKitTags()
synchronized(toolList) {
list.forEach {
invokeAddSingleToolKitCustomItem(ctx, it, toolTags)
}
viewModel?.updateToolKitData(toolList)
}
}
fun invokeGetToolkitAllTags(): Set<String> {
return getToolKitTags()
}
fun invokeRemoveToolkitByTag(toolTagList: List<String>) {
// synchronized(toolList) {
// val targetList = toolList.filter { toolTagList.contains(it.toolTag) }
// toolList.removeAll(targetList.toSet())
// viewModel?.updateToolKitData(toolList)
// }
}
}

View File

@@ -0,0 +1,25 @@
package com.mogo.eagle.core.function.hmi.bone.toolkit
import androidx.recyclerview.widget.DiffUtil
internal class ToolKitListDiffCallback(
private val old: List<ToolKitBean>,
private val update: List<ToolKitBean>
) : DiffUtil.Callback() {
override fun getOldListSize(): Int = old.size
override fun getNewListSize(): Int = update.size
override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean {
val old = old[oldItemPosition]
val new = update[newItemPosition]
return old == new
}
override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean {
val old = old[oldItemPosition]
val new = update[newItemPosition]
return old.toolTag == new.toolTag
}
}

View File

@@ -2,6 +2,7 @@ package com.mogo.eagle.core.function.hmi.bone.toolkit
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
class ToolKitViewModel : ViewModel() {
val toolKitList: MutableLiveData<ArrayList<ToolKitBean>> = MutableLiveData()
@@ -11,6 +12,8 @@ class ToolKitViewModel : ViewModel() {
}
fun updateToolKitData(newData: ArrayList<ToolKitBean>) {
toolKitList.value = newData
UiThreadHandler.post({
toolKitList.postValue(newData)
}, UiThreadHandler.MODE.QUEUE)
}
}

View File

@@ -5,6 +5,7 @@ import android.text.TextUtils
import android.transition.Slide
import android.util.Log
import android.view.Gravity
import android.view.View
import android.view.ViewGroup
import android.view.WindowManager
import androidx.lifecycle.ProcessLifecycleOwner
@@ -29,7 +30,9 @@ import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWarningStatusListener
import com.mogo.eagle.core.function.api.hmi.xiaozhi.event.Event
import com.mogo.eagle.core.function.api.hmi.xiaozhi.listener.OnXiaoZhiStateChangeListener
import com.mogo.eagle.core.function.api.hmi.xiaozhi.state.State
import com.mogo.eagle.core.function.api.och.IToolKitItemClickListener
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.call.hmi.CallerHmiViewControlListenerManager
import com.mogo.eagle.core.function.call.v2x.CallerTrafficLightListenerManager
import com.mogo.eagle.core.function.call.v2x.CallerTurnLightListenerManager
@@ -40,8 +43,8 @@ import com.mogo.eagle.core.function.hmi.ui.lookaround.M1LookAroundView
import com.mogo.eagle.core.function.hmi.ui.notice.DispatchDialogManager
import com.mogo.eagle.core.function.hmi.ui.notice.NoticeCheckDialog
import com.mogo.eagle.core.function.hmi.ui.notice.traffic.NoticeTrafficDialog
import com.mogo.eagle.core.function.hmi.ui.setting.CameraLiveView.Companion.cameraLiveView
import com.mogo.eagle.core.function.hmi.ui.operate.OperatePanelLayout
import com.mogo.eagle.core.function.hmi.ui.setting.CameraLiveView.Companion.cameraLiveView
import com.mogo.eagle.core.function.hmi.ui.setting.StatusView
import com.mogo.eagle.core.function.hmi.ui.setting.ToolsView.Companion.toolsView
import com.mogo.eagle.core.function.hmi.ui.tools.AdUpgradeDialog
@@ -441,10 +444,6 @@ class MoGoHmiProvider : IMoGoHmiProvider {
CallerHmiViewControlListenerManager.invokeGreenWaveDismiss()
}
override fun registerToolKitDefaultItemClickListener(tag: String, listener: IToolKitItemClickListener) {
ToolKitDataManager.addListener(TAG, listener)
}
override fun toggleOperatePanel(show: Boolean) {
val activity = AppStateManager.currentActivity()
if (activity == null) {
@@ -474,4 +473,74 @@ class MoGoHmiProvider : IMoGoHmiProvider {
operatePanel.get()?.get()?.hide()
}
}
override fun addToolKitDefaultItemClickListener(tag: String, listener: IToolKitItemClickListener) {
ToolKitDataManager.addListener(TAG, listener)
}
/**
* 增加单个默认样式的工具箱item
* @param toolTag 唯一标识tag和前面toolTag重复的默认不添加跳过
* @param toolTitle 工具名称
* @param toolDrawableIcon icon drawable 资源文件id
* @param position 在列表中排列位置 (1...N), position大于当前列表size最大值的默认放列表最后
*/
override fun addSingleToolKitDefaultItem(
toolTag: String,
toolTitle: String,
toolDrawableIcon: Int,
position: Int
) {
context?.also { ctx ->
ToolKitDataManager.invokeAddMultiToolKitDefaultItem(ctx, ArrayList<ToolKitDefaultItemAddParam>().also {
it += ToolKitDefaultItemAddParam(toolTag, toolTitle, toolDrawableIcon, position)
})
}
}
/**
* 增加多个默认样式的工具箱item
*/
override fun addMultiToolkitDefaultItem(list: ArrayList<ToolKitDefaultItemAddParam>) {
context?.also { ctx ->
ToolKitDataManager.invokeAddMultiToolKitDefaultItem(ctx, list)
}
}
/**
* 增加单个自定义样式的工具箱item
* @param toolTag 唯一标识tag和前面toolTag重复的默认不添加跳过
* @param customView 自定义View
* @param position 在列表中排列位置 (1...N), position大于当前列表size最大值的默认放列表最后
*/
override fun addSingleToolKitCustomItem(toolTag: String, customView: View, position: Int) {
context?.also { ctx ->
ToolKitDataManager.invokeAddMultiToolKitCustomItem(ctx, ArrayList<ToolKitCustomItemAddParam>().also {
it += ToolKitCustomItemAddParam(toolTag, customView, position)
})
}
}
/**
* 增加多个自定义样式的工具箱item
*/
override fun addMultiToolkitCustomItem(list: ArrayList<ToolKitCustomItemAddParam>) {
context?.also { ctx ->
ToolKitDataManager.invokeAddMultiToolKitCustomItem(ctx, list)
}
}
/**
* 获取当前所有工具箱中各工具的tag
*/
override fun getToolkitAllTags(): Set<String> {
return ToolKitDataManager.invokeGetToolkitAllTags()
}
/**
* 根据toolTag 移除工具箱中工具
*/
override fun removeToolkitByTag(toolTagList: List<String>) {
ToolKitDataManager.invokeRemoveToolkitByTag(toolTagList)
}
}