Merge branch 'dev_robotaxi-d_240807_6.6.0' of gitlab.zhidaoauto.com:SCA/L4HA/AndroidApp/MoGoEagleEye into dev_robotaxi-d_240807_6.6.0

This commit is contained in:
xinfengkun
2024-08-23 15:21:28 +08:00
25 changed files with 299 additions and 87 deletions

View File

@@ -27,7 +27,7 @@ object RecordManager {
*/
fun insertRecord(context: Context,takeOverRecordInfo: TakeOverRecordInfo){
takeOverRecordInfo.let {
val recordInfo = RecordInfo(null,it.address,it.faultStartTime,it.level1Id,
val recordInfo = RecordInfo(it.faultStartTime,it.address,it.level1Id,
it.level2Id,it.level3Id,it.lineName,it.reportNote,it.reportStatus)
if (Thread.currentThread() == Looper.getMainLooper().thread){
scope.launch{
@@ -59,7 +59,7 @@ object RecordManager {
*/
fun updateRecord(context: Context,takeOverRecordInfo: TakeOverRecordInfo){
takeOverRecordInfo.let{
val recordInfo = RecordInfo(null,it.address,it.faultStartTime,it.level1Id,
val recordInfo = RecordInfo(it.faultStartTime,it.address,it.level1Id,
it.level2Id,it.level3Id,it.lineName,it.reportNote,it.reportStatus)
if (Thread.currentThread() == Looper.getMainLooper().thread){
scope.launch{
@@ -91,7 +91,7 @@ object RecordManager {
*/
fun deleteRecord(context: Context, takeOverRecordInfo: TakeOverRecordInfo) {
takeOverRecordInfo.let{
val recordInfo = RecordInfo(null,it.address,it.faultStartTime,it.level1Id,
val recordInfo = RecordInfo(it.faultStartTime,it.address,it.level1Id,
it.level2Id,it.level3Id,it.lineName,it.reportNote,it.reportStatus)
if (Thread.currentThread() == Looper.getMainLooper().thread){
scope.launch {

View File

@@ -9,15 +9,12 @@ import androidx.room.PrimaryKey
*/
@Entity(tableName = "take_over_record")
data class RecordInfo(
//自增主键
@PrimaryKey(autoGenerate = true)
var id: Int ?= null,
//故障开始时间 主键
@PrimaryKey(autoGenerate = false)
val faultStartTime: Long,
//故障地点
@ColumnInfo
val address: String,
//故障开始时间 yyyy-MM-dd HH:mm:ss
@ColumnInfo
val faultStartTime: String,
//一级分类ID
@ColumnInfo
var level1Id: Int,

View File

@@ -291,6 +291,16 @@ class DevaToolsProvider : IDevaToolsProvider, IAppStateListener {
}
}
/**
* 受channel业务影响的功能需要更新todo 建议有流程
* AppIdentityModeUtils.getMisChannelCode
*/
override fun updateAppChannel() {
bizConfigCenter.updateChannelRole() //功能开关配置更新
traceManager.syncConfig() //同步信息至ms
BindingCarManager.queryAppUpgrade() //更新App升级信息
}
private fun initMatrix() {
val builder: Matrix.Builder = Matrix.Builder(AbsMogoApplication.getApp())
builder.pluginListener(object : PluginListener {

View File

@@ -1,6 +1,7 @@
package com.zhjt.mogo_core_function_devatools.badcase
import android.annotation.SuppressLint
import android.app.Activity
import android.content.Context
import android.graphics.Bitmap
@@ -74,6 +75,8 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis
private var record: AutoPilotRecord? = null
private var recordKey: Long = 0 //主动录制bag包key
@SuppressLint("StaticFieldLeak")
private var reportTypeWindow: ReportTypeWindow ?= null
fun init(context: Context) {
CallerAutopilotRecordListenerManager.addListener(TAG, this)
@@ -191,18 +194,19 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis
view.setOnClickListener{
if (ClickUtils.isFastClick()){
if (NetworkUtils.isConnected()){
//TODO 更改dockerVersion是否为空
if (BadCaseConfig.dockerVersion == null){
if (BadCaseConfig.dockerVersion != null){
if(ProjectUtils.isSaas()){
//660版本数据闭环增加统一上报问题入口仅限于saas渠道
//TODO 已存在WIndow再次点击会再次创建WIndow
val reportTypeWindow = ReportTypeWindow(activity)
reportTypeWindow.setClickListener(object: ReportTypeWindow.ClickListener{
override fun closeWindow() {
reportTypeWindow.hideFloatWindow()
}
})
reportTypeWindow.showFloatWindow()
if(reportTypeWindow == null){
reportTypeWindow = ReportTypeWindow(activity)
reportTypeWindow?.setClickListener(object: ReportTypeWindow.ClickListener{
override fun closeWindow() {
reportTypeWindow?.hideFloatWindow()
reportTypeWindow = null
}
})
reportTypeWindow?.showFloatWindow()
}
}else{
//展示工单上报弹窗
val workOrderWindow = WorkOrderWindow(activity)

View File

@@ -20,6 +20,8 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_DEVA
import com.mogo.commons.storage.SharedPrefsMgr
import com.mogo.eagle.core.data.deva.report.WorkOrderReportInfo
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
import com.mogo.eagle.core.utilcode.mogo.getMisChannelCode
import com.zhjt.mogo_core_function_devatools.trace.TraceManager
import com.zhjt.mogo_core_function_devatools.upgrade.IPCUpgradeManager.Companion.ipcUpgradeManager
import com.zhjt.mogo_core_function_devatools.upgrade.ObuUpgradeAppNetWorkManager
@@ -228,7 +230,7 @@ object BindingCarManager : IMoGoAutopilotCarConfigListener, IMoGoCloudListener {
}
CallerLogger.d(M_DEVA + "UPGRADE", "---- 3 ----[mac: $macAddress]")
UpgradeAppNetWorkManager.instance
?.getAppUpgradeInfo(mContext, macAddress, role.toString() + "")
?.getAppUpgradeInfo(mContext, macAddress, AppIdentityModeUtils.getMisChannelCode(FunctionBuildConfig.appIdentityMode).toString() + "")
}
}

View File

@@ -10,6 +10,8 @@ import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_TYPE_ST
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotCarConfigListener
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotCarConfigListenerManager
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsFuncConfigListenerManager
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_DEVA
import com.mogo.eagle.core.utilcode.util.GsonUtils
import com.mogo.eagle.core.utilcode.util.SPUtils
import com.mogo.eagle.core.utilcode.util.ToastUtils
@@ -35,6 +37,8 @@ class FuncConfigCenter : IMogoOnMessageListener<FuncConfig>, IMoGoAutopilotCarCo
private var mContext: Context? = null
private val funcConfigNetWorkModel = FuncConfigNetWorkModel()
@Volatile
private var macAddress:String? = null
fun init(context: Context) {
mContext = context
@@ -48,15 +52,26 @@ class FuncConfigCenter : IMogoOnMessageListener<FuncConfig>, IMoGoAutopilotCarCo
refreshConfig(GsonUtils.fromJson(bizJson, FuncConfig::class.java))
}
fun updateChannelRole(){
macAddress?.let {
refresh(it)
}
}
override fun onAutopilotCarConfig(carConfigResp: MessagePad.CarConfigResp) {
if (!carConfigResp.macAddress.isNullOrEmpty()) {
UiThreadHandler.post {
funcConfigNetWorkModel.requestFuncConfig(carConfigResp.macAddress, {
SPUtils.getInstance("biz_config").put("config", GsonUtils.toJson(it))
refreshConfig(it) }, {})
}
macAddress = carConfigResp.macAddress
refresh(carConfigResp.macAddress)
} else {
ToastUtils.showLong("未获取到域控mac信息")
CallerLogger.i("$M_DEVA$TAG","未获取到域控mac信息")
}
}
private fun refresh(macAddress: String){
UiThreadHandler.post {
funcConfigNetWorkModel.requestFuncConfig(macAddress, {
SPUtils.getInstance("biz_config").put("config", GsonUtils.toJson(it))
refreshConfig(it) }, {})
}
}

View File

@@ -5,6 +5,8 @@ import android.annotation.SuppressLint
import android.app.Activity
import android.graphics.PixelFormat
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.text.Editable
import android.text.TextWatcher
import android.util.DisplayMetrics
@@ -27,28 +29,44 @@ import androidx.constraintlayout.widget.Group
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.amap.api.services.core.LatLonPoint
import com.amap.api.services.geocoder.GeocodeResult
import com.amap.api.services.geocoder.GeocodeSearch
import com.amap.api.services.geocoder.RegeocodeQuery
import com.amap.api.services.geocoder.RegeocodeResult
import com.iflytek.cloud.ErrorCode
import com.iflytek.cloud.InitListener
import com.iflytek.cloud.RecognizerListener
import com.iflytek.cloud.RecognizerResult
import com.iflytek.cloud.SpeechError
import com.iflytek.cloud.SpeechRecognizer
import com.mogo.commons.storage.SharedPrefsMgr
import com.mogo.eagle.core.data.app.AppConfigInfo
import com.mogo.eagle.core.data.deva.report.CategoryInfo
import com.mogo.eagle.core.data.deva.report.PadAddProblemReq
import com.mogo.eagle.core.data.deva.report.PadProblemInfo
import com.mogo.eagle.core.function.api.devatools.IMoGoDevaToolsListener
import com.mogo.eagle.core.function.api.order.IOrderListener
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsListenerManager
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager
import com.mogo.eagle.core.function.call.order.CallerOrderListenerManager
import com.mogo.eagle.core.utilcode.util.BarUtils
import com.mogo.eagle.core.utilcode.util.JsonParser
import com.mogo.eagle.core.utilcode.util.ThreadUtils
import com.mogo.eagle.core.utilcode.util.TimeUtils
import com.mogo.eagle.core.utilcode.util.TimeUtils.millis2String
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.mogo.tts.base.SpeechUtils
import com.zhjt.mogo_core_function_devatools.R
import com.zhjt.mogo_core_function_devatools.workorder.adapter.OrderReasonAdapter
import kotlinx.coroutines.DelicateCoroutinesApi
import kotlin.math.absoluteValue
/**
* 故障原因编辑窗口
*/
class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener{
class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener,
IMoGoDevaToolsListener, IOrderListener {
companion object{
const val TAG = "FaultReasonWindow"
@@ -93,6 +111,15 @@ class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener{
private lateinit var orderReasonAdapter: OrderReasonAdapter
private var address: String = "" //故障地点
private var faultCodeList = ArrayList<String>() //故障码列表
private var level1Id: Int = 0 //一级分类ID
private var level2Id: Int = 0 //二级分类ID
private var level3Id: Int = 0 //三级分类ID
private var lineName: String = "" //行驶路线
private var reportNote: String = "" //上报描述
private val reportType: Int = 2 //上报方式0小程序 1司机屏 2云端上报
init {
initFloatWindow()
}
@@ -158,6 +185,8 @@ class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener{
@SuppressLint("SetTextI18n")
private fun initEvent(){
CallerDevaToolsListenerManager.addListener(TAG, this)
CallerOrderListenerManager.addListener(TAG,this)
val iconDown = ContextCompat.getDrawable(mActivity, R.drawable.icon_fault_expand)
iconDown?.setBounds(0, 0, iconDown.minimumWidth, iconDown.minimumHeight)
val iconUp = ContextCompat.getDrawable(mActivity, R.drawable.icon_fault_retract)
@@ -268,7 +297,30 @@ class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener{
}
//上报
tvFaultReport.setOnClickListener{
//TODO
CallerOrderListenerManager.invokeOrderLineUpdate("测试")
val geocodeSearch = GeocodeSearch(mActivity)
geocodeSearch.setOnGeocodeSearchListener(object: GeocodeSearch.OnGeocodeSearchListener {
override fun onRegeocodeSearched(regeocodeResult: RegeocodeResult?, p1: Int) {
regeocodeResult?.regeocodeAddress?.formatAddress?.let {
address = it
}
val padProblemList= ArrayList<PadProblemInfo>()
val padProblemInfo = PadProblemInfo(address,faultCodeList,millis2String(workOrderOccurrenceTime),level1Id,
level2Id,level3Id,lineName,reportNote,reportType,
SharedPrefsMgr.getInstance().getString("och_account",""))
padProblemList.add(padProblemInfo)
val padAddProblemReq = PadAddProblemReq(padProblemList,AppConfigInfo.plateNumber)
CallerDevaToolsManager.problemPadAdd(padAddProblemReq)
}
override fun onGeocodeSearched(p0: GeocodeResult?, p1: Int) {
}
})
val latLon = LatLonPoint(CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84().latitude, CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84().longitude)
val q = RegeocodeQuery(latLon,200f,GeocodeSearch.AMAP)
geocodeSearch.getFromLocationAsyn(q)
}
//取消
tvFaultCancel.setOnClickListener {
@@ -306,6 +358,10 @@ class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener{
}
}
/**
* 初始化监听器。
*/
/**
* 初始化监听器。
*/
@@ -315,6 +371,10 @@ class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener{
}
}
/**
* 听写监听器。
*/
/**
* 听写监听器。
*/
@@ -353,6 +413,10 @@ class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener{
}
/**
* 显示结果
*/
/**
* 显示结果
*/
@@ -416,10 +480,11 @@ class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener{
}
fun hideFloatWindow() {
CallerDevaToolsListenerManager.removeListener(TAG)
CallerOrderListenerManager.removeListener(TAG)
if (mFloatLayout.parent != null){
mWindowManager!!.removeView(mFloatLayout)
}
CallerDevaToolsListenerManager.removeListener(TAG)
}
fun setClickListener(clickListener: ClickListener) {
@@ -430,4 +495,42 @@ class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener{
fun closeWindow()
}
/**
* 故障上报成功
*/
override fun problemPadAddSuccess() {
super.problemPadAddSuccess()
//显示上报成功页面,短暂停留关闭弹窗
ThreadUtils.runOnUiThread {
rvFaultList.visibility = View.GONE
tvUploadSuccess.visibility = View.VISIBLE
faultReasonGroup.visibility = View.GONE
val successHandler = Handler(Looper.getMainLooper())
successHandler.postDelayed({
hideFloatWindow()
},1500)
}
}
override fun problemPadAddError(msg: String) {
super.problemPadAddError(msg)
ToastUtils.showShort("故障原因上报失败$msg")
}
override fun getCategoriesSuccess(list: List<CategoryInfo>) {
super.getCategoriesSuccess(list)
}
override fun getCategoriesError(msg: String) {
super.getCategoriesError(msg)
}
/**
* 订单路线名称变化监听
* @param lineName 路线名称
*/
override fun onOrderLineUpdate(lineName: String) {
this.lineName = lineName
}
}

View File

@@ -4,6 +4,8 @@ import android.annotation.SuppressLint
import android.app.Activity
import android.graphics.PixelFormat
import android.os.CountDownTimer
import android.os.Handler
import android.os.Looper
import android.os.SystemClock
import android.util.DisplayMetrics
import android.view.Gravity
@@ -125,11 +127,17 @@ class ReportTypeWindow constructor(activity: Activity) {
BadCaseConfig.type, Random(SystemClock.elapsedRealtime()).nextInt().absoluteValue,
BadCaseConfig.totalDuration, BadCaseConfig.previousDuration)
if(response){
ToastUtils.showShort("主动录包命令下发成功")
//已发起录包
reportTypeGroup.visibility = View.GONE
tvReportSuccess.visibility = View.VISIBLE
tvReportSuccess.text = mActivity.resources.getString(R.string.record_success)
val successHandler = Handler(Looper.getMainLooper())
successHandler.postDelayed({
clickListener?.closeWindow()
},1500)
}else{
ToastUtils.showShort("主动录包命令下发失败")
}
clickListener?.closeWindow()
}
}
@@ -139,7 +147,7 @@ class ReportTypeWindow constructor(activity: Activity) {
val metrics = DisplayMetrics()
// 默认固定位置,靠屏幕右边缘的中间
mWindowManager!!.defaultDisplay.getMetrics(metrics)
mWindowParams!!.x = metrics.widthPixels-2257
mWindowParams!!.x = metrics.widthPixels-2258
mWindowParams!!.y = metrics.heightPixels - BarUtils.getStatusBarHeight()-420
mWindowManager!!.addView(mFloatLayout, mWindowParams)
}

View File

@@ -33,7 +33,11 @@ import com.iflytek.cloud.RecognizerListener
import com.iflytek.cloud.RecognizerResult
import com.iflytek.cloud.SpeechError
import com.iflytek.cloud.SpeechRecognizer
import com.mogo.eagle.core.data.deva.report.CategoryInfo
import com.mogo.eagle.core.data.deva.report.TakeOverRecordInfo
import com.mogo.eagle.core.function.api.devatools.IMoGoDevaToolsListener
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsListenerManager
import com.mogo.eagle.core.function.call.takeover.CallerTakeOverManager
import com.mogo.eagle.core.utilcode.util.BarUtils
import com.mogo.eagle.core.utilcode.util.JsonParser
import com.mogo.eagle.core.utilcode.util.TimeUtils
@@ -48,7 +52,8 @@ import kotlin.math.absoluteValue
/**
* 接管原因编辑窗口
*/
class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListener {
class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListener,
IMoGoDevaToolsListener {
companion object{
const val TAG = "TakeOverReasonWindow"
@@ -81,13 +86,14 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene
private lateinit var tbTakeOverReason: ToggleButton
private lateinit var etNoteInput: AppCompatEditText
private lateinit var ivNoteAudio: ImageView
private lateinit var tvTakeOverReport: TextView
private lateinit var tvTakeOverSave: TextView
private lateinit var tvTakeOverCancel: TextView
private lateinit var rvTakeOverList: RecyclerView
private lateinit var tvUploadSuccess: AppCompatTextView
private lateinit var takeOverReasonGroup: Group
private lateinit var orderReasonAdapter: OrderReasonAdapter
private lateinit var mTakeOverRecordInfo: TakeOverRecordInfo
init {
initFloatWindow()
@@ -121,7 +127,7 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene
tbTakeOverReason = mFloatLayout.findViewById(R.id.tbTakeOverReason)
etNoteInput = mFloatLayout.findViewById(R.id.etNoteInput)
ivNoteAudio = mFloatLayout.findViewById(R.id.ivNoteAudio)
tvTakeOverReport = mFloatLayout.findViewById(R.id.tvTakeOverReport)
tvTakeOverSave = mFloatLayout.findViewById(R.id.tvTakeOverSave)
tvTakeOverCancel = mFloatLayout.findViewById(R.id.tvTakeOverCancel)
rvTakeOverList = mFloatLayout.findViewById(R.id.rvTakeOverList)
tvUploadSuccess = mFloatLayout.findViewById(R.id.tvUploadSuccess)
@@ -150,6 +156,7 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene
@SuppressLint("SetTextI18n")
private fun initEvent(){
CallerDevaToolsListenerManager.addListener(TAG, this)
val iconDown = ContextCompat.getDrawable(mActivity, R.drawable.icon_fault_expand)
iconDown?.setBounds(0, 0, iconDown.minimumWidth, iconDown.minimumHeight)
val iconUp = ContextCompat.getDrawable(mActivity, R.drawable.icon_fault_retract)
@@ -245,8 +252,11 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene
setAudio(audioStatus)
}
//上报
tvTakeOverReport.setOnClickListener{
//TODO
tvTakeOverSave.setOnClickListener{
mTakeOverRecordInfo.reportNote = etNoteInput.text.toString()
CallerTakeOverManager.updateRecord(mActivity,mTakeOverRecordInfo)
clickListener?.onSaveReason()
hideFloatWindow()
}
//取消
tvTakeOverCancel.setOnClickListener {
@@ -379,7 +389,7 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene
return true
}
fun showFloatWindow() {
fun showFloatWindow(takeOverRecordInfo: TakeOverRecordInfo) {
if (mFloatLayout.parent == null) {
val metrics = DisplayMetrics()
// 默认固定位置,靠屏幕右边缘的中间
@@ -387,9 +397,8 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene
mWindowParams!!.x = metrics.widthPixels-890
mWindowParams!!.y = metrics.heightPixels - BarUtils.getStatusBarHeight()-1140
mWindowManager!!.addView(mFloatLayout, mWindowParams)
}
mTakeOverRecordInfo = takeOverRecordInfo
}
fun hideFloatWindow() {
@@ -404,7 +413,15 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene
}
interface ClickListener {
fun closeWindow()
fun onSaveReason()
}
override fun getCategoriesSuccess(list: List<CategoryInfo>) {
super.getCategoriesSuccess(list)
}
override fun getCategoriesError(msg: String) {
super.getCategoriesError(msg)
}
}

View File

@@ -4,19 +4,26 @@ import android.content.Context
import android.util.AttributeSet
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.fragment.app.FragmentActivity
import androidx.recyclerview.widget.LinearLayoutManager
import com.mogo.eagle.core.data.deva.report.TakeOverRecordInfo
import com.mogo.eagle.core.function.call.takeover.CallerTakeOverManager
import com.mogo.eagle.core.utilcode.kotlin.lifeCycleScope
import com.mogo.eagle.core.utilcode.util.ThreadUtils
import com.mogo.eagle.core.utilcode.util.TimeUtils
import com.mogo.eagle.core.utilcode.util.TimeUtils.getYMDFormat
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.mogo.eagle.core.utilcode.util.Utils
import com.zhjt.mogo_core_function_devatools.R
import com.zhjt.mogo_core_function_devatools.workorder.adapter.BottomDecoration
import com.zhjt.mogo_core_function_devatools.workorder.adapter.TakeOverListAdapter
import kotlinx.android.synthetic.main.view_take_over_record.view.ivTakeOverRecordClose
import kotlinx.android.synthetic.main.view_take_over_record.view.recordGroup
import kotlinx.android.synthetic.main.view_take_over_record.view.rvTakeOverList
import kotlinx.android.synthetic.main.view_take_over_record.view.tvDeleteSelect
import kotlinx.android.synthetic.main.view_take_over_record.view.tvRecordNoData
import kotlinx.android.synthetic.main.view_take_over_record.view.tvTakeOverRecordDate
import kotlinx.android.synthetic.main.view_take_over_record.view.tvUpload
import kotlinx.coroutines.Dispatchers
@@ -37,6 +44,10 @@ class TakeOverRecordView @JvmOverloads constructor(
const val TAG = "TakeOverRecordView"
}
private val scope by lazy {
Utils.getApp().lifeCycleScope
}
private var takeOverListAdapter: TakeOverListAdapter ?= null
private var clickListener: ClickListener? = null
private val selectedUploadRecord = ArrayList<TakeOverRecordInfo>()
@@ -62,7 +73,13 @@ class TakeOverRecordView @JvmOverloads constructor(
val activity = context as? FragmentActivity
?: throw IllegalStateException("please ensure context is FragmentActivity.")
val takeOverReasonWindow = TakeOverReasonWindow(activity)
takeOverReasonWindow.showFloatWindow()
takeOverReasonWindow.setClickListener(object: TakeOverReasonWindow.ClickListener{
override fun onSaveReason() {
//刷新列表 TODO 应该局部刷新
refreshList()
}
})
takeOverReasonWindow.showFloatWindow(takeOverRecordInfo)
}
override fun onSelectRecord(
@@ -83,43 +100,42 @@ class TakeOverRecordView @JvmOverloads constructor(
)
rvTakeOverList.adapter = takeOverListAdapter
val list = ArrayList<TakeOverRecordInfo>()
// GlobalScope.launch(Dispatchers.IO){
// list = CallerTakeOverManager.getAllRecord(context)
// }
val takeOverRecordInfoOne = TakeOverRecordInfo(System.currentTimeMillis().toString(),"环球贸易中心",1,2,3,"lineNamelineNamelineNamelineNamelineNamelineNamelineNamelineNamelineNamelineName","描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1",false)
val takeOverRecordInfoTwo = TakeOverRecordInfo(System.currentTimeMillis().toString(),"环球贸易中心",1,2,3,"lineName","描述2",false)
val takeOverRecordInfoThree = TakeOverRecordInfo(System.currentTimeMillis().toString(),"环球贸易中心",1,2,3,"lineName","描述3",true)
val takeOverRecordInfoFour = TakeOverRecordInfo(System.currentTimeMillis().toString(),"环球贸易中心",1,2,3,"lineName","描述4",true)
val takeOverRecordInfoFive = TakeOverRecordInfo(System.currentTimeMillis().toString(),"环球贸易中心",1,2,3,"lineName","描述5",false)
val takeOverRecordInfoSix = TakeOverRecordInfo(System.currentTimeMillis().toString(),"环球贸易中心",1,2,3,"lineName","描述6",false)
val takeOverRecordInfoSeven = TakeOverRecordInfo(System.currentTimeMillis().toString(),"环球贸易中心",1,2,3,"lineName","描述7",false)
val takeOverRecordInfoEight = TakeOverRecordInfo(System.currentTimeMillis().toString(),"环球贸易中心",1,2,3,"lineName","描述8",true)
val takeOverRecordInfoNine = TakeOverRecordInfo(System.currentTimeMillis().toString(),"环球贸易中心",1,2,3,"lineName","描述9",false)
val takeOverRecordInfoTen = TakeOverRecordInfo(System.currentTimeMillis().toString(),"环球贸易中心",1,2,3,"lineName","描述10",true)
list.add(takeOverRecordInfoOne)
list.add(takeOverRecordInfoTwo)
list.add(takeOverRecordInfoThree)
list.add(takeOverRecordInfoFour)
list.add(takeOverRecordInfoFive)
list.add(takeOverRecordInfoSix)
list.add(takeOverRecordInfoSeven)
list.add(takeOverRecordInfoEight)
list.add(takeOverRecordInfoNine)
list.add(takeOverRecordInfoTen)
takeOverListAdapter?.setData(list)
//一键上传
tvUpload.setOnClickListener {
}
//删除
tvDeleteSelect.setOnClickListener {
// CallerTakeOverManager.deleteRecord(context,)
if(selectedUploadRecord.isEmpty()){
ToastUtils.showShort("请选择需要删除的接管记录")
}else{
selectedUploadRecord.forEach {
CallerTakeOverManager.deleteRecord(context,it)
}
refreshList()
}
}
refreshList()
}
/**
* 刷新接管记录列表
*/
private fun refreshList(){
scope.launch(Dispatchers.IO){
val recordList= CallerTakeOverManager.getAllRecord(context)
ThreadUtils.runOnUiThread {
if(recordList.isEmpty()){
tvRecordNoData.visibility = View.VISIBLE
recordGroup.visibility = View.GONE
}else{
tvRecordNoData.visibility = View.GONE
recordGroup.visibility = View.VISIBLE
//更新列表
takeOverListAdapter?.setData(recordList)
}
}
}
}

View File

@@ -75,7 +75,7 @@ class WorkOrderManager{
CallerDevaToolsListenerManager.invokeProblemPadAddSuccess()
},
onError = {
CallerDevaToolsListenerManager.invokeProblemPadAddError()
CallerDevaToolsListenerManager.invokeProblemPadAddError(it)
}
)
}

View File

@@ -53,7 +53,7 @@ class WorkOrderNetWorkModel {
onSuccess.invoke("")
}
onError{
onError.invoke("")
onError.invoke(it.message+"")
}
}
}

View File

@@ -10,6 +10,7 @@ import android.widget.TextView
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.RecyclerView
import com.mogo.eagle.core.data.deva.report.TakeOverRecordInfo
import com.mogo.eagle.core.utilcode.util.TimeUtils
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.zhjt.mogo_core_function_devatools.R
@@ -35,11 +36,10 @@ class TakeOverListAdapter(private val context: Context): RecyclerView.Adapter<Ta
override fun onBindViewHolder(holder: TakeOverRecordHolder, position: Int) {
data?.let {
val recordEntity = it[position]
holder.cbRecordSelect.isClickable = !recordEntity.reportStatus
holder.cbRecordSelect.setOnCheckedChangeListener { _, isChecked ->
clickListener?.onSelectRecord(recordEntity,isChecked)
}
holder.tvFaultStartTime.text = recordEntity.faultStartTime
holder.tvFaultStartTime.text = TimeUtils.millis2String(recordEntity.faultStartTime)
holder.tvLineName.text = recordEntity.lineName
holder.tvTakeOverReason.text = recordEntity.reportNote
if(recordEntity.reportStatus){

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -266,7 +266,7 @@
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:background="@drawable/report_button_bg"
android:text="@string/take_over_report"
android:text="@string/fault_report"
android:textColor="#FFFFFF"
android:textSize="@dimen/sp_27"
android:textStyle="bold"

View File

@@ -111,7 +111,7 @@
android:textSize="@dimen/sp_26"
android:textColor="@color/white"
app:drawableTopCompat="@drawable/icon_report_success"
android:layout_marginTop="@dimen/dp_59"
android:layout_marginTop="@dimen/dp_79"
android:drawablePadding="@dimen/dp_22"
android:visibility="gone"
/>

View File

@@ -201,13 +201,13 @@
/>
<TextView
android:id="@+id/tvTakeOverReport"
android:id="@+id/tvTakeOverSave"
android:layout_width="@dimen/dp_380"
android:layout_height="@dimen/dp_80"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:background="@drawable/report_button_bg"
android:text="@string/take_over_report"
android:text="@string/take_over_save"
android:textColor="#FFFFFF"
android:textSize="@dimen/sp_27"
android:textStyle="bold"

View File

@@ -92,6 +92,30 @@
android:gravity="center"
/>
<androidx.constraintlayout.widget.Group
android:id="@+id/recordGroup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:constraint_referenced_ids="tvTakeOverRecordDate,
rvTakeOverList,tvUpload,tvDeleteSelect"
android:visibility="gone"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tvRecordNoData"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginTop="@dimen/dp_652"
app:drawableTopCompat="@drawable/icon_record_no_data"
android:text="@string/take_over_record_no_data"
android:drawablePadding="@dimen/dp_33"
android:textColor="#CAD6FF"
android:textSize="@dimen/sp_34"
android:gravity="center_horizontal"
/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -61,7 +61,9 @@
<string name="fault_note_supplement">(选填)</string>
<string name="take_over_note_input">手动输入</string>
<string name="take_over_note_audio">补充描述语音输入</string>
<string name="take_over_report">上报</string>
<string name="fault_report">上报</string>
<string name="take_over_save">保存</string>
<string name="take_over_cancel">取消</string>
<string name="take_over_record_no_data">暂无接管记录</string>
</resources>