[待上传任务信息]
This commit is contained in:
yangyakun
2024-08-26 13:42:32 +08:00
parent 1c513c2127
commit 3e8f0f011c
11 changed files with 371 additions and 27 deletions

View File

@@ -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 qrcodesn = "
+ 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 qrcodesn = "
+ 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 -> {}
}
}

View File

@@ -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()
}
}
}

View File

@@ -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()
}

View File

@@ -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>

View File

@@ -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>