[6.6.0]
[待上传任务信息]
This commit is contained in:
@@ -37,6 +37,7 @@ import com.mogo.och.weaknet.constant.BusConst
|
||||
import com.mogo.och.weaknet.presenter.BusPresenter
|
||||
import com.mogo.och.weaknet.ui.BusStationCommonItem
|
||||
import com.mogo.och.weaknet.ui.BusSwitchLineActivity
|
||||
import com.mogo.och.weaknet.ui.taskrunning.RunningTaskManager
|
||||
import me.jessyan.autosize.utils.AutoSizeUtils
|
||||
import org.greenrobot.eventbus.Subscribe
|
||||
import org.greenrobot.eventbus.ThreadMode
|
||||
@@ -105,31 +106,40 @@ class ShuttleFragment : BaseShuttleTabFragment<ShuttleFragment?, BusPresenter?>(
|
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
fun changeOverview(eventLogout: EventLogout) {
|
||||
if (eventLogout.messgae == EventLogout.LOGOUT_TYPE) {
|
||||
d(SceneConstant.M_BUS + TAG, "changeOverview Event消息去登出")
|
||||
mPresenter!!.logout()
|
||||
} else if (eventLogout.messgae == EventLogout.SHOW_QR_TYPE) { //显示二维码
|
||||
d(
|
||||
SceneConstant.M_BUS + TAG, "changeOverview Event qrcode,sn = "
|
||||
+ SharedPrefsMgr.getInstance().sn
|
||||
)
|
||||
val qrUrl = String.format(
|
||||
FunctionBuildConfig.urlJson.bindDriverQRUrl,
|
||||
SharedPrefsMgr.getInstance().sn
|
||||
)
|
||||
val bmQr = createQRCodeWithPicture(
|
||||
BitmapFactory.decodeResource(resources, R.drawable.icon_qr_center_logo),
|
||||
qrUrl, AutoSizeUtils.dp2px(context, 340f),
|
||||
AutoSizeUtils.dp2px(context, 340f), true
|
||||
)
|
||||
if (bmQr != null) {
|
||||
val builder = BindQRCodeDialog.Builder()
|
||||
builder.title(getString(R.string.bind_driver_qr_title))
|
||||
.cancelStr(getString(R.string.qr_cancel))
|
||||
.qrBm(bmQr).build(AbsMogoApplication.getApp())!!.show()
|
||||
} else {
|
||||
d(SceneConstant.M_BUS + TAG, "bmQr = null ")
|
||||
when (eventLogout.messgae) {
|
||||
EventLogout.LOGOUT_TYPE-> {
|
||||
d(SceneConstant.M_BUS + TAG, "changeOverview Event消息去登出")
|
||||
mPresenter!!.logout()
|
||||
}
|
||||
EventLogout.SHOW_QR_TYPE-> { //显示二维码
|
||||
d(
|
||||
SceneConstant.M_BUS + TAG, "changeOverview Event qrcode,sn = "
|
||||
+ SharedPrefsMgr.getInstance().sn
|
||||
)
|
||||
val qrUrl = String.format(
|
||||
FunctionBuildConfig.urlJson.bindDriverQRUrl,
|
||||
SharedPrefsMgr.getInstance().sn
|
||||
)
|
||||
val bmQr = createQRCodeWithPicture(
|
||||
BitmapFactory.decodeResource(resources, R.drawable.icon_qr_center_logo),
|
||||
qrUrl, AutoSizeUtils.dp2px(context, 340f),
|
||||
AutoSizeUtils.dp2px(context, 340f), true
|
||||
)
|
||||
if (bmQr != null) {
|
||||
val builder = BindQRCodeDialog.Builder()
|
||||
builder.title(getString(R.string.bind_driver_qr_title))
|
||||
.cancelStr(getString(R.string.qr_cancel))
|
||||
.qrBm(bmQr).build(AbsMogoApplication.getApp())!!.show()
|
||||
} else {
|
||||
d(SceneConstant.M_BUS + TAG, "bmQr = null ")
|
||||
}
|
||||
}
|
||||
EventLogout.SHOW_WAIT_UPLOAD_TASK-> {
|
||||
context?.let {
|
||||
RunningTaskManager.showBadCaseConfigWindow(it)
|
||||
}
|
||||
}
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,145 @@
|
||||
package com.mogo.och.weaknet.ui.taskrunning
|
||||
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Color
|
||||
import android.graphics.Rect
|
||||
import android.graphics.drawable.ColorDrawable
|
||||
import android.os.Build.VERSION
|
||||
import android.os.Build.VERSION_CODES
|
||||
import android.transition.Slide
|
||||
import android.view.Gravity
|
||||
import android.view.MotionEvent
|
||||
import android.view.View
|
||||
import android.view.ViewConfiguration
|
||||
import android.view.WindowManager
|
||||
import android.view.animation.AccelerateDecelerateInterpolator
|
||||
import android.widget.PopupWindow
|
||||
import android.widget.PopupWindow.INPUT_METHOD_NEEDED
|
||||
import androidx.fragment.app.FragmentActivity
|
||||
import androidx.lifecycle.Lifecycle.Event
|
||||
import androidx.lifecycle.LifecycleEventObserver
|
||||
import androidx.lifecycle.LifecycleOwner
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import com.mogo.eagle.core.utilcode.kotlin.lifeCycleOwner
|
||||
import com.mogo.eagle.core.utilcode.reminder.Reminder
|
||||
import com.mogo.eagle.core.utilcode.reminder.api.impl.PopupWindowReminder
|
||||
import com.mogo.eagle.core.utilcode.util.*
|
||||
import me.jessyan.autosize.utils.AutoSizeUtils
|
||||
import kotlin.math.abs
|
||||
|
||||
object RunningTaskManager : LifecycleEventObserver{
|
||||
|
||||
const val TAG = "BadCase"
|
||||
|
||||
private var hideFloat: (() -> Unit)? = null
|
||||
|
||||
fun init(context: Context) {
|
||||
}
|
||||
|
||||
/**
|
||||
* 展示BadCase配置页面
|
||||
*/
|
||||
fun showBadCaseConfigWindow(context: Context) {
|
||||
val badCaseConfigView = RunningTaskManagerView(context)
|
||||
badCaseConfigView.setOnClickListener(object : RunningTaskManagerView.ClickListener {
|
||||
override fun onClose() {
|
||||
hideFloat?.invoke()
|
||||
hideFloat = null
|
||||
}
|
||||
})
|
||||
enqueuePop(
|
||||
badCaseConfigView,
|
||||
AutoSizeUtils.dp2px(context, 960f),
|
||||
WindowManager.LayoutParams.MATCH_PARENT,
|
||||
key = "BadCaseConfigView"
|
||||
).also {
|
||||
hideFloat = it
|
||||
}
|
||||
}
|
||||
|
||||
override fun onStateChanged(source: LifecycleOwner, event: Event) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
fun enqueuePop(content: View, width: Int, height: Int, key: String = "", startX: Int = 0, startY: Int = 0, gravity: Int = Gravity.START, onOuterViewClicked:((focus: View) -> Unit)? = null, isOverride: Boolean = false, isFocusable: Boolean = true): () -> Unit {
|
||||
val topActivity = ActivityUtils.getTopActivity()
|
||||
val activity = (topActivity as? FragmentActivity) ?: throw IllegalStateException("please use Activity to trigger pop show.")
|
||||
val isImmersiveMode = BarUtils.isImmersiveMode(activity)
|
||||
var tempReminder: PopupWindowReminder? = null
|
||||
activity.lifecycleScope.launchWhenResumed {
|
||||
val pop = PopupWindow(width, height).also {
|
||||
it.isOutsideTouchable = true
|
||||
it.isTouchable = true
|
||||
it.isFocusable = isFocusable
|
||||
it.inputMethodMode = INPUT_METHOD_NEEDED
|
||||
it.isClippingEnabled = false
|
||||
var x = 0f
|
||||
var y = 0f
|
||||
val touchSlop = ViewConfiguration.get(activity).scaledTouchSlop
|
||||
var isClicked = false
|
||||
it.setTouchInterceptor { v, event ->
|
||||
val out = Rect()
|
||||
v.getGlobalVisibleRect(out)
|
||||
if (out.contains(event.x.toInt(), event.y.toInt())) {
|
||||
return@setTouchInterceptor false
|
||||
}
|
||||
|
||||
when(event.actionMasked) {
|
||||
MotionEvent.ACTION_DOWN -> {
|
||||
x = event.x
|
||||
y = event.y
|
||||
}
|
||||
MotionEvent.ACTION_MOVE -> {
|
||||
val deltaX = event.x - x
|
||||
val deltaY = event.y - y
|
||||
isClicked = !(abs(deltaX) > touchSlop || abs(deltaY) > touchSlop)
|
||||
}
|
||||
MotionEvent.ACTION_UP -> {
|
||||
if (isClicked) {
|
||||
isClicked = false
|
||||
onOuterViewClicked?.invoke(v)
|
||||
}
|
||||
}
|
||||
}
|
||||
try {
|
||||
return@setTouchInterceptor true
|
||||
} finally {
|
||||
activity.window.decorView.dispatchTouchEvent(event)
|
||||
}
|
||||
}
|
||||
it.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
|
||||
}
|
||||
if (VERSION.SDK_INT >= VERSION_CODES.M) {
|
||||
val transition = Slide(gravity).also {
|
||||
it.interpolator = AccelerateDecelerateInterpolator()
|
||||
it.duration = 200
|
||||
}
|
||||
pop.enterTransition = transition
|
||||
pop.exitTransition = transition
|
||||
}
|
||||
pop.contentView = content
|
||||
val reminder = object : PopupWindowReminder(pop) {
|
||||
|
||||
override fun key(): String {
|
||||
return key + super.key()
|
||||
}
|
||||
|
||||
override fun show() {
|
||||
pop.showAtLocation(activity.window.decorView, gravity, startX, if (isImmersiveMode) 0 else BarUtils.getStatusBarHeight() + startY)
|
||||
}
|
||||
override fun isOverride(): Boolean = isOverride
|
||||
}
|
||||
tempReminder = reminder
|
||||
Reminder.enqueue(activity.lifeCycleOwner, reminder)
|
||||
}
|
||||
return {
|
||||
tempReminder?.hide()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
package com.mogo.och.weaknet.ui.taskrunning
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Color
|
||||
import android.graphics.drawable.ColorDrawable
|
||||
import android.util.AttributeSet
|
||||
import android.view.LayoutInflater
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import com.mogo.och.shuttle.weaknet.R
|
||||
import kotlinx.android.synthetic.main.shuttle_wadk_task_running.view.clLayout
|
||||
import kotlinx.android.synthetic.main.shuttle_wadk_task_running.view.ivTaskRunningClose
|
||||
|
||||
|
||||
/**
|
||||
* @author XuXinChao
|
||||
* @description BadCase录包管理页面
|
||||
* @since: 2022/12/15
|
||||
*/
|
||||
class RunningTaskManagerView @JvmOverloads constructor(
|
||||
context: Context,
|
||||
attrs: AttributeSet? = null,
|
||||
defStyleAttr: Int = 0
|
||||
) : ConstraintLayout(context, attrs, defStyleAttr) {
|
||||
|
||||
companion object {
|
||||
const val TAG = "BadCaseManagerView"
|
||||
}
|
||||
|
||||
private var clickListener:ClickListener?=null
|
||||
|
||||
init {
|
||||
LayoutInflater.from(context).inflate(R.layout.shuttle_wadk_task_running, this, true)
|
||||
initView()
|
||||
}
|
||||
|
||||
private fun initView(){
|
||||
background = ColorDrawable(Color.parseColor("#F0151D41"))
|
||||
clLayout.setOnClickListener {
|
||||
}
|
||||
//关闭BadCase管理窗口
|
||||
ivTaskRunningClose.setOnClickListener {
|
||||
clickListener?.onClose()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
fun setOnClickListener(clickListener: ClickListener) {
|
||||
this.clickListener = clickListener
|
||||
}
|
||||
|
||||
interface ClickListener {
|
||||
fun onClose()
|
||||
}
|
||||
|
||||
override fun onAttachedToWindow() {
|
||||
super.onAttachedToWindow()
|
||||
|
||||
}
|
||||
|
||||
override fun onDetachedFromWindow() {
|
||||
super.onDetachedFromWindow()
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
interface ClickListener {
|
||||
fun onClose()
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="960dp"
|
||||
android:layout_height="match_parent"
|
||||
android:background="#F0151D41"
|
||||
android:id="@+id/clLayout"
|
||||
>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/ivTaskRunningClose"
|
||||
android:layout_width="107dp"
|
||||
android:layout_height="107dp"
|
||||
android:layout_marginTop="66dp"
|
||||
android:layout_marginEnd="40dp"
|
||||
android:src="@drawable/icon_close_nor"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
/>
|
||||
|
||||
<View
|
||||
android:id="@+id/viewManagerTitleLine"
|
||||
android:layout_width="14dp"
|
||||
android:layout_height="50dp"
|
||||
android:layout_marginStart="80dp"
|
||||
android:layout_marginTop="92dp"
|
||||
android:background="#2966EC"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvManagerTitle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="任务管理"
|
||||
android:textColor="#FFFFFFFF"
|
||||
android:textSize="42dp"
|
||||
app:layout_constraintTop_toTopOf="@id/viewManagerTitleLine"
|
||||
app:layout_constraintBottom_toBottomOf="@id/viewManagerTitleLine"
|
||||
app:layout_constraintLeft_toLeftOf="@id/viewManagerTitleLine"
|
||||
android:layout_marginStart="50dp"
|
||||
/>
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
app:layout_constraintTop_toBottomOf="@+id/tvManagerTitle"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/no_order_data_view"
|
||||
android:visibility="gone">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/no_order_data_iv"
|
||||
android:layout_width="@dimen/dp_386"
|
||||
android:layout_height="@dimen/dp_350"
|
||||
android:src="@drawable/no_order_data"
|
||||
android:scaleType="fitXY"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"/>
|
||||
<TextView
|
||||
android:id="@+id/no_order_data_tv"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textColor="#9099BF"
|
||||
android:textSize="46dp"
|
||||
android:gravity="center"
|
||||
android:layout_marginTop="58dp"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/no_order_data_iv"
|
||||
android:text="@string/bus_no_running_task"/>
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -43,6 +43,8 @@
|
||||
<string name="shuttle_write_off_count">本站核销成功:%1$d人</string>
|
||||
<string name="shuttle_write_off_count_default">本站核销成功:0人</string>
|
||||
|
||||
<string name="bus_no_running_task">暂无待上传任务</string>
|
||||
|
||||
|
||||
|
||||
<string name="bus_before_tips_s">距离发车时间还有%1$s分钟</string>
|
||||
|
||||
@@ -66,6 +66,10 @@ class ToolsView private constructor() {
|
||||
dismissToolsFloatView()
|
||||
CallerDevaToolsManager.showTakeOverRecordView(it)
|
||||
}
|
||||
|
||||
override fun showWaitUploadTaskView() {
|
||||
dismissToolsFloatView()
|
||||
}
|
||||
})
|
||||
}
|
||||
toolsViewFloat = WarningFloat.with(it)
|
||||
|
||||
@@ -12,6 +12,7 @@ import android.view.View
|
||||
import android.widget.FrameLayout
|
||||
import com.mogo.commons.env.ProjectUtils
|
||||
import com.mogo.eagle.core.data.app.AppConfigInfo
|
||||
import com.mogo.eagle.core.data.config.FunctionBuildConfig
|
||||
import com.mogo.eagle.core.data.deva.bindingcar.IPCUpgradeStateInfo
|
||||
import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig
|
||||
import com.mogo.eagle.core.data.deva.report.TakeOverRecordInfo
|
||||
@@ -27,6 +28,7 @@ import com.mogo.eagle.core.function.hmi.R
|
||||
import com.mogo.eagle.core.function.hmi.ui.utils.KeyBoardUtil
|
||||
import com.mogo.eagle.core.function.msgbox.MsgBoxConfig
|
||||
import com.mogo.eagle.core.utilcode.kotlin.onClick
|
||||
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
|
||||
import com.mogo.eagle.core.utilcode.util.ActivityUtils
|
||||
import com.mogo.eagle.core.utilcode.util.ToastUtils
|
||||
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
|
||||
@@ -163,6 +165,13 @@ internal class AutoPilotAndCheckView @JvmOverloads constructor(
|
||||
takeOverRecordLayout.setOnClickListener {
|
||||
clickListener?.showTakeOverRecordView()
|
||||
}
|
||||
if (AppIdentityModeUtils.isShuttle(FunctionBuildConfig.appIdentityMode)){
|
||||
waitUploadTaskLayout.visibility = View.VISIBLE
|
||||
waitUploadTaskLayout.onClick {
|
||||
clickListener?.showWaitUploadTaskView()
|
||||
EventBus.getDefault().post(EventLogout(EventLogout.SHOW_WAIT_UPLOAD_TASK))
|
||||
}
|
||||
}
|
||||
}
|
||||
if (AppConfigInfo.isConnectAutopilot) {
|
||||
CallerAutoPilotControlManager.getCarConfig()
|
||||
@@ -320,6 +329,7 @@ internal class AutoPilotAndCheckView @JvmOverloads constructor(
|
||||
fun showSOPSettingView()
|
||||
fun showBadCaseManagerView()
|
||||
fun showTakeOverRecordView()
|
||||
fun showWaitUploadTaskView()
|
||||
}
|
||||
|
||||
override fun onAutopilotCarConfig(carConfigResp: MessagePad.CarConfigResp) {
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 24 KiB |
@@ -185,9 +185,9 @@
|
||||
android:id="@+id/takeOverRecordLayout"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="@dimen/dp_216"
|
||||
app:layout_constraintLeft_toLeftOf="@id/checkSystemView"
|
||||
app:layout_constraintTop_toBottomOf="@id/checkSystemView"
|
||||
android:layout_marginTop="@dimen/dp_90"
|
||||
app:layout_constraintTop_toTopOf="@+id/badCaseReportLayout"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/badCaseReportLayout"
|
||||
app:layout_constraintStart_toEndOf="@+id/badCaseReportLayout"
|
||||
android:layout_marginStart="@dimen/dp_142"
|
||||
android:visibility="gone"
|
||||
>
|
||||
@@ -211,6 +211,34 @@
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/waitUploadTaskLayout"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="@dimen/dp_216"
|
||||
android:layout_marginStart="@dimen/dp_142"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/takeOverRecordLayout"
|
||||
app:layout_constraintStart_toEndOf="@+id/takeOverRecordLayout"
|
||||
app:layout_constraintTop_toTopOf="@+id/takeOverRecordLayout">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="@dimen/dp_150"
|
||||
android:layout_height="@dimen/dp_150"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:background="@drawable/icon_wait_upload_task"
|
||||
android:contentDescription="@string/wait_upload_task" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="@dimen/dp_42"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:text="@string/wait_upload_task"
|
||||
android:textColor="@color/color_FFA7B6F0"
|
||||
android:textSize="@dimen/sp_32" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_check_title"
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
<string name="debug_sop">运营面板</string>
|
||||
<string name="debug_bad_case">录包</string>
|
||||
<string name="take_over_record">接管记录</string>
|
||||
<string name="wait_upload_task">本地任务</string>
|
||||
<string name="debug_bad_case_manager">录包管理</string>
|
||||
<string name="debug_bad_case_report">上报</string>
|
||||
<string name="check_vehicle_speed_setting">车速设置</string>
|
||||
|
||||
@@ -6,6 +6,7 @@ public class EventLogout {
|
||||
public final static int LOGOUT_TYPE = 100001;
|
||||
public final static int PERSONAL_TYPE = 100002;
|
||||
public final static int SHOW_QR_TYPE = 100003;
|
||||
public final static int SHOW_WAIT_UPLOAD_TASK = 100004;
|
||||
|
||||
public EventLogout(int messgaeType) {
|
||||
this.messgaeType = messgaeType;
|
||||
|
||||
Reference in New Issue
Block a user