[6.7.0]fix: code conflict ;
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
@@ -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 })
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
// }
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user