diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/constant/TaskMenuTypeEnum.kt b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/constant/TaskMenuTypeEnum.kt new file mode 100644 index 0000000000..562a71002f --- /dev/null +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/constant/TaskMenuTypeEnum.kt @@ -0,0 +1,10 @@ +package com.mogo.och.sweeper.constant + +/** + * 当前任务操作菜单 + */ +enum class TaskMenuTypeEnum(val code: Int) { + JUMP_OVER_TASK( 1),//跳过任务 + END_TASK( 2),//结束任务 + CANCEL_TASK( 3);//取消 +} \ No newline at end of file diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/BaseSweeperTabFragment.java b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/BaseSweeperTabFragment.java index d4aa341904..cbdaa3867e 100644 --- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/BaseSweeperTabFragment.java +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/BaseSweeperTabFragment.java @@ -24,8 +24,8 @@ import com.mogo.map.uicontroller.IMogoMapUIController; import com.mogo.map.uicontroller.VisualAngleMode; import com.mogo.och.sweeper.R; import com.mogo.och.sweeper.ui.SweeperOperatePanelView; +import com.mogo.och.sweeper.ui.popwindow.MenuPopWindow; import com.mogo.och.sweeper.view.SweeperCurrentTaskInfoView; -import com.mogo.och.sweeper.view.SweeperTaskMenuView; import com.mogo.och.sweeper.view.SweeperTrafficDataView; import com.mogo.och.sweeper.view.SweeperWorkModeView; @@ -60,8 +60,6 @@ public abstract class BaseSweeperTabFragment { - if (mOperatePanel.getVisibility() == View.VISIBLE) { - mOperatePanel.setVisibility(View.GONE); - } else { - mOperatePanel.setVisibility(View.VISIBLE); - } - }); - //任务操作菜单打开关闭处理 - mCurrentTaskView.getIvMore().setOnClickListener(v -> { - if (mTaskMenu.getVisibility() == View.VISIBLE) { - mTaskMenu.setVisibility(View.GONE); - } else { - mTaskMenu.setVisibility(View.VISIBLE); - } - }); } /** - * 任务列表面板 + * 任务列表面板隐藏或显示 * * @return */ - public void setTaskListPanelView(boolean isShow) { + public void setShowTaskListPanelView(boolean isShow) { if (isShow) { panelView.setVisibility(View.VISIBLE); } else { panelView.setVisibility(View.GONE); } } - + /** + * 当前任务面板隐藏或显示 + * + * @return + */ + public void setShowCurrentTaskPanelView(boolean isShow) { + if (isShow) { + mCurrentTaskView.setVisibility(View.VISIBLE); + } else { + mCurrentTaskView.setVisibility(View.GONE); + } + } /** * 清扫模式展示面板 * @@ -191,16 +183,6 @@ public abstract class BaseSweeperTabFragment() { +class SweeperFragment : BaseSweeperTabFragment(),MenuPopWindow.OnMenuItemOnClickListener { private var mAdapter: TaskListAdapter? = null + //当前任务操作菜单 + private var mTaskMenuPopWindow: MenuPopWindow? = null + // + private var mPosition:Int=-1 private val mutableList: MutableList by lazy { mutableListOf() } override fun getTagName(): String { return "SweepersFragment" @@ -37,6 +43,7 @@ class SweeperFragment : BaseSweeperTabFragment + + } + //任务操作菜单打开关闭处理 + currentTaskPanelView.getIvMore().setOnClickListener { v: View? -> + if (mTaskMenuPopWindow?.isShowing!=true) { + mTaskMenuPopWindow?.showAsDropDown( + workModePanelView, + resources.getDimension(R.dimen.dp_580).toInt(), + resources.getDimension(R.dimen.dp_36).toInt() + ) + } else { + mTaskMenuPopWindow?.dismiss() + } } } private val onTaskItemClickListener = object : TaskListAdapter.TaskItemClickListener { override fun onItemClick(position: Int) { mAdapter?.selectPosition(position) + mPosition=position + tvTaskConfirm.isSelected=true } } + override fun onMenuItemClick(itemType: TaskMenuTypeEnum) { + when(itemType.code){ + TaskMenuTypeEnum.JUMP_OVER_TASK.code->{ + setShowTaskListPanelView(true) + setShowCurrentTaskPanelView(false) + } + TaskMenuTypeEnum.END_TASK.code->{ + setShowTaskListPanelView(true) + setShowCurrentTaskPanelView(false) + } + } + } } \ No newline at end of file diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/ui/popwindow/MenuPopWindow.kt b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/ui/popwindow/MenuPopWindow.kt new file mode 100644 index 0000000000..5aec5548c9 --- /dev/null +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/ui/popwindow/MenuPopWindow.kt @@ -0,0 +1,91 @@ +package com.mogo.och.sweeper.ui.popwindow + +import android.content.Context +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup.LayoutParams +import android.widget.PopupWindow +import android.widget.TextView +import com.mogo.och.sweeper.R +import com.mogo.och.sweeper.constant.TaskMenuTypeEnum + +/** + * 当前任务操作菜单栏 + */ +class MenuPopWindow : PopupWindow, View.OnClickListener { + + private var mTvJumpOverTask: TextView? = null + + private var mTaskJumpLineView: View? = null + + private var mTvEndTask: TextView? = null + + private var mTvCancelTask: TextView? = null + + private var mMenuItemClickListener:OnMenuItemOnClickListener?=null + + constructor(context: Context,menuItemClickListener:OnMenuItemOnClickListener) : super(context) { + init(context) + this.mMenuItemClickListener=menuItemClickListener + } + + /** + * 初始化布局 + */ + private fun init(context: Context) { + setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + var view: View = LayoutInflater.from(context).inflate(R.layout.sweeper_task_menu, null) + mTvJumpOverTask = view.findViewById(R.id.tvJumpOverTask) + mTaskJumpLineView = view.findViewById(R.id.taskJumpLineView) + mTvEndTask = view.findViewById(R.id.tvEndTask) + mTvCancelTask = view.findViewById(R.id.tvCancelTask) + mTvJumpOverTask?.setOnClickListener(this) + mTvEndTask?.setOnClickListener(this) + mTvCancelTask?.setOnClickListener(this) + width = context.resources.getDimension(R.dimen.dp_174).toInt() + height = LayoutParams.WRAP_CONTENT + contentView = view + isFocusable = true + isOutsideTouchable = true + } + + /** + * 设置是否是手动任务 + * 1:云端自动驾驶任务 + * 2:云端手动驾驶任务 + * 3: 运营任务 + */ + fun setMenuView(type: Int) { + if (type == 1) { + mTvJumpOverTask?.visibility = View.GONE + mTaskJumpLineView?.visibility = View.GONE + } else { + mTvJumpOverTask?.visibility = View.VISIBLE + mTaskJumpLineView?.visibility = View.VISIBLE + } + } + + interface OnMenuItemOnClickListener { + fun onMenuItemClick(itemType: TaskMenuTypeEnum) + } + + override fun onClick(v: View) { + when(v.id){ + R.id.tvJumpOverTask->{ + mMenuItemClickListener?.onMenuItemClick(TaskMenuTypeEnum.JUMP_OVER_TASK) + dismiss() + } + R.id.tvEndTask->{ + mMenuItemClickListener?.onMenuItemClick(TaskMenuTypeEnum.END_TASK) + dismiss() + } + R.id.tvCancelTask->{ + mMenuItemClickListener?.onMenuItemClick(TaskMenuTypeEnum.CANCEL_TASK) + dismiss() + } + } + } + +} \ No newline at end of file diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SubTaskView.kt b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SubTaskView.kt index 38578356cd..a191eba1db 100644 --- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SubTaskView.kt +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SubTaskView.kt @@ -3,8 +3,11 @@ package com.mogo.och.sweeper.view import android.content.Context import android.util.AttributeSet import android.view.LayoutInflater +import android.view.View import androidx.constraintlayout.widget.ConstraintLayout import com.mogo.och.sweeper.R +import com.mogo.och.sweeper.bean.TaskInfoBean +import kotlinx.android.synthetic.main.sweeper_subtask_view.view.* /** * 子任务View @@ -21,4 +24,14 @@ class SubTaskView : ConstraintLayout { private fun initView(context: Context) { LayoutInflater.from(context).inflate(R.layout.sweeper_subtask_view, this) } + + /** + * 设置子任务信息 + */ + fun setData(taskInfo:TaskInfoBean,isSelect:Boolean=false,isLastTask:Boolean=false){ + tvSubTaskName.text = taskInfo.taskName + tvSubTaskName.setTextColor(if (isSelect) 0x3BD2FF else 0xFFFFFF) + ivSubTask.setImageResource(if (isSelect) R.drawable.sweeper_icon_select_subtask else R.drawable.sweeper_icon_not_select_subtask) + ivRightDownArrow.visibility=if (isLastTask) View.GONE else View.VISIBLE + } } \ No newline at end of file diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperCurrentTaskInfoView.kt b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperCurrentTaskInfoView.kt index a81af24f0e..6e6031a9e4 100644 --- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperCurrentTaskInfoView.kt +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperCurrentTaskInfoView.kt @@ -3,17 +3,17 @@ package com.mogo.och.sweeper.view import android.content.Context import android.util.AttributeSet import android.view.LayoutInflater +import android.view.View import android.widget.ImageView import androidx.constraintlayout.widget.ConstraintLayout import com.mogo.och.sweeper.R +import com.mogo.och.sweeper.bean.TaskInfoBean import kotlinx.android.synthetic.main.sweeper_current_task_info.view.* /** * 清扫车当前任务信息展示 */ class SweeperCurrentTaskInfoView : ConstraintLayout { - private var menuView: SweeperTaskMenuView? = null - constructor(context: Context) : super(context) {} constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) { initView(context) @@ -26,11 +26,41 @@ class SweeperCurrentTaskInfoView : ConstraintLayout { LayoutInflater.from(context).inflate(R.layout.sweeper_current_task_info, this) } + fun getIvMore(): ImageView = ivMore + /** - * 设置当前任务信息 + * 设置当前任务数据 */ - fun setCurrentTask(sweeperTaskMenuView: SweeperTaskMenuView?) { - menuView = sweeperTaskMenuView + fun setData(listTask: List, currentPosition: Int) { + if (listTask.size == 1) { + preSubTask.setData(listTask[currentPosition], isSelect=true,isLastTask=true) + currentSubTask.visibility = View.INVISIBLE + lastSubTask.visibility = View.INVISIBLE + } else if (listTask.size == 2) { + if (currentPosition==0){ + preSubTask.setData(listTask[currentPosition], isSelect=true) + currentSubTask.setData(listTask[1], isSelect=true) + }else{ + preSubTask.setData(listTask[currentPosition - 1]) + currentSubTask.setData(listTask[currentPosition], isSelect=true,isLastTask=true) + } + lastSubTask.visibility = View.INVISIBLE + } else { + //当前正在执行的任务是第一个子任务 + if (currentPosition == 0) { + preSubTask.setData(listTask[currentPosition], isSelect=true) + currentSubTask.setData(listTask[1]) + lastSubTask.setData(listTask[2], isLastTask=true) + //当前正在执行的任务是最后一个子任务 + } else if (currentPosition == listTask.size - 1) { + preSubTask.setData(listTask[currentPosition - 2], isSelect=true) + currentSubTask.setData(listTask[currentPosition-1]) + lastSubTask.setData(listTask[currentPosition], isSelect=true,isLastTask=true) + } else { + preSubTask.setData(listTask[currentPosition - 1]) + currentSubTask.setData(listTask[currentPosition],isSelect=true) + lastSubTask.setData(listTask[currentPosition + 1],isLastTask=true) + } + } } - fun getIvMore():ImageView=ivMore } \ No newline at end of file diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperTaskMenuView.kt b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperTaskMenuView.kt deleted file mode 100644 index 5ed11b57c1..0000000000 --- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperTaskMenuView.kt +++ /dev/null @@ -1,40 +0,0 @@ -package com.mogo.och.sweeper.view - -import android.content.Context -import android.util.AttributeSet -import android.view.LayoutInflater -import android.view.View -import androidx.constraintlayout.widget.ConstraintLayout -import com.mogo.och.sweeper.R -import kotlinx.android.synthetic.main.sweeper_task_menu.view.* - -/** - * 清扫车任务操作菜单 - */ -class SweeperTaskMenuView:ConstraintLayout { - constructor(context: Context) : super(context) - constructor(context: Context, attrs: AttributeSet?) : super(context, attrs){ - initView(context) - } - constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) - constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int) : super(context, attrs, defStyleAttr, defStyleRes) - - private fun initView(context: Context) { - LayoutInflater.from(context).inflate(R.layout.sweeper_task_menu, this) - } - /** - * 设置是否是手动任务 - * 1:云端自动驾驶任务 - * 2:云端手动驾驶任务 - * 3: 运营任务 - */ - fun setMenuView(type:Int){ - if (type==1){ - tvTaskJumpOver.visibility= View.GONE - taskJumpLineView.visibility= View.GONE - }else{ - tvTaskJumpOver.visibility= View.VISIBLE - taskJumpLineView.visibility= View.VISIBLE - } - } -} \ No newline at end of file diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperTrafficDataView.kt b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperTrafficDataView.kt index 65d2a83c5b..3f2304e00b 100644 --- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperTrafficDataView.kt +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperTrafficDataView.kt @@ -151,7 +151,7 @@ class SweeperTrafficDataView : ConstraintLayout, private val limitingVelocityListener: LimitingVelocityListener = object : LimitingVelocityListener { override fun onLimitingVelocityChange(limitingVelocity: Int) { //设置限速 - sweeperLimitingVelocity!!.updateLimitingSpeed(limitingVelocity) + sweeperLimitingVelocity?.updateLimitingSpeed(limitingVelocity) } } diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_icon_current_subtask.png b/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_icon_current_subtask.png deleted file mode 100644 index 8a065b66dd..0000000000 Binary files a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_icon_current_subtask.png and /dev/null differ diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_icon_not_current_subtask.png b/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_icon_not_current_subtask.png deleted file mode 100644 index e0bb24c526..0000000000 Binary files a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_icon_not_current_subtask.png and /dev/null differ diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_icon_not_select_subtask.png b/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_icon_not_select_subtask.png new file mode 100644 index 0000000000..ba1a86b3dd Binary files /dev/null and b/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_icon_not_select_subtask.png differ diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_icon_select_subtask.png b/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_icon_select_subtask.png new file mode 100644 index 0000000000..ed3b871338 Binary files /dev/null and b/OCH/mogo-och-sweeper/src/main/res/drawable-xhdpi/sweeper_icon_select_subtask.png differ diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/bg_bubble.xml b/OCH/mogo-och-sweeper/src/main/res/drawable/bg_bubble.xml index 491598a373..cfa9d4b17e 100644 --- a/OCH/mogo-och-sweeper/src/main/res/drawable/bg_bubble.xml +++ b/OCH/mogo-och-sweeper/src/main/res/drawable/bg_bubble.xml @@ -9,7 +9,7 @@ - + diff --git a/OCH/mogo-och-sweeper/src/main/res/drawable/bg_task_menu.xml b/OCH/mogo-och-sweeper/src/main/res/drawable/bg_task_menu.xml index 9942026a18..1df3248028 100644 --- a/OCH/mogo-och-sweeper/src/main/res/drawable/bg_task_menu.xml +++ b/OCH/mogo-och-sweeper/src/main/res/drawable/bg_task_menu.xml @@ -1,5 +1,5 @@ - + \ No newline at end of file diff --git a/OCH/mogo-och-sweeper/src/main/res/layout/item_och_sweeper_station.xml b/OCH/mogo-och-sweeper/src/main/res/layout/item_och_sweeper_station.xml index 088890a1d2..3d18f13240 100644 --- a/OCH/mogo-och-sweeper/src/main/res/layout/item_och_sweeper_station.xml +++ b/OCH/mogo-och-sweeper/src/main/res/layout/item_och_sweeper_station.xml @@ -26,7 +26,7 @@ android:layout_width="20dp" android:layout_height="20dp" android:scaleType="center" - android:src="@drawable/sweeper_icon_current_subtask" + android:src="@drawable/sweeper_icon_select_subtask" app:layout_constraintBottom_toBottomOf="@id/module_mogo_och_sweeper_station_name" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintVertical_bias="0.4" diff --git a/OCH/mogo-och-sweeper/src/main/res/layout/sweeper_base_fragment.xml b/OCH/mogo-och-sweeper/src/main/res/layout/sweeper_base_fragment.xml index 68c9768f55..77aa62ac3a 100644 --- a/OCH/mogo-och-sweeper/src/main/res/layout/sweeper_base_fragment.xml +++ b/OCH/mogo-och-sweeper/src/main/res/layout/sweeper_base_fragment.xml @@ -37,14 +37,6 @@ android:layout_marginBottom="@dimen/dp_30" android:visibility="visible" /> - - + app:layout_constraintTop_toBottomOf="@+id/tvCancelTask"/> + app:layout_constraintEnd_toEndOf="parent" + android:visibility="gone"/> \ No newline at end of file