diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/takeover/RecordManager.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/takeover/RecordManager.kt index d6457f8dda..e7235038a0 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/takeover/RecordManager.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/takeover/RecordManager.kt @@ -87,7 +87,7 @@ object RecordManager { /** * 删除接管记录 * @param context 上下文 - * @param recordInfo 接管数据实体 + * @param takeOverRecordInfo 接管数据实体 */ fun deleteRecord(context: Context, takeOverRecordInfo: TakeOverRecordInfo) { takeOverRecordInfo.let{ diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/FaultReasonWindow.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/FaultReasonWindow.kt new file mode 100644 index 0000000000..50ee45482a --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/FaultReasonWindow.kt @@ -0,0 +1,348 @@ +package com.zhjt.mogo_core_function_devatools.workorder + + +import android.annotation.SuppressLint +import android.app.Activity +import android.graphics.PixelFormat +import android.os.Bundle +import android.text.Editable +import android.text.TextWatcher +import android.util.DisplayMetrics +import android.util.Log +import android.view.Gravity +import android.view.LayoutInflater +import android.view.MotionEvent +import android.view.View +import android.view.View.OnFocusChangeListener +import android.view.WindowManager +import android.view.animation.Animation +import android.view.animation.ScaleAnimation +import android.widget.EditText +import android.widget.ImageView +import android.widget.TextView +import androidx.appcompat.widget.AppCompatEditText +import androidx.constraintlayout.widget.Group +import androidx.recyclerview.widget.RecyclerView +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.eagle.core.function.call.devatools.CallerDevaToolsListenerManager +import com.mogo.eagle.core.utilcode.util.BarUtils +import com.mogo.eagle.core.utilcode.util.JsonParser +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 kotlinx.coroutines.DelicateCoroutinesApi +import kotlin.math.absoluteValue + +/** + * 故障原因编辑窗口 + */ +class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener{ + + companion object{ + const val TAG = "FaultReasonWindow" + } + + private var mActivity: Activity = activity + private var mWindowParams: WindowManager.LayoutParams? = null + private var mWindowManager: WindowManager? = null + private lateinit var mFloatLayout: View + + private var mInViewX = 0f + private var mInViewY = 0f + private var mInScreenX = 0f + private var mInScreenY = 0f + + // 语音听写对象 + private var mIat: SpeechRecognizer? = null + // 用HashMap存储听写结果 + private val mIatResults: HashMap = LinkedHashMap() + + var ret = 0 // 函数调用返回值 + private var audioStatus = false + + private var workOrderOccurrenceTime = System.currentTimeMillis() //故障发生时间 + + private var clickListener: ClickListener? = null + + private lateinit var tvFaultTitle: TextView + private lateinit var tvFaultTime: TextView + private lateinit var tvFaultType: TextView + private lateinit var ivFaultTypeSelect: ImageView + private lateinit var tvFaultReason: TextView + private lateinit var ivFaultReasonSelect: ImageView + private lateinit var ivTimeReduce: ImageView + private lateinit var tvOccurrenceTime: TextView + private lateinit var ivTimeAdd: ImageView + private lateinit var etNoteInput: AppCompatEditText + private lateinit var ivNoteAudio: ImageView + private lateinit var tvFaultReport: TextView + private lateinit var tvFaultCancel: TextView + private lateinit var rvFaultList: RecyclerView + private lateinit var tvUploadSuccess: TextView + private lateinit var faultReasonGroup: Group + + init { + initFloatWindow() + } + + @SuppressLint("InflateParams") + private fun initFloatWindow(){ + mFloatLayout = LayoutInflater.from(mActivity).inflate(R.layout.view_fault_reason, null) as View + mFloatLayout.setOnTouchListener(this) + + // 初始化识别无UI识别对象 + // 使用SpeechRecognizer对象,可根据回调消息自定义界面; + mIat = SpeechRecognizer.createRecognizer(mActivity, mInitListener) + initView() + initEvent() + mWindowParams = WindowManager.LayoutParams() + mWindowManager = mActivity.windowManager + mWindowParams?.let { + it.format = PixelFormat.RGBA_8888 + it.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL + it.gravity = Gravity.START or Gravity.TOP + it.width = 844 + it.height = 991 + it.alpha = 1.0f + } + } + + private fun initView(){ + tvFaultTitle = mFloatLayout.findViewById(R.id.tvFaultTitle) + tvFaultTime = mFloatLayout.findViewById(R.id.tvFaultTime) + tvFaultType = mFloatLayout.findViewById(R.id.tvFaultType) + ivFaultTypeSelect = mFloatLayout.findViewById(R.id.ivFaultTypeSelect) + tvFaultReason = mFloatLayout.findViewById(R.id.tvFaultReason) + ivFaultReasonSelect = mFloatLayout.findViewById(R.id.ivFaultReasonSelect) + ivTimeReduce = mFloatLayout.findViewById(R.id.ivTimeReduce) + tvOccurrenceTime = mFloatLayout.findViewById(R.id.tvOccurrenceTime) + ivTimeAdd = mFloatLayout.findViewById(R.id.ivTimeAdd) + etNoteInput = mFloatLayout.findViewById(R.id.etNoteInput) + ivNoteAudio = mFloatLayout.findViewById(R.id.ivNoteAudio) + tvFaultReport = mFloatLayout.findViewById(R.id.tvFaultReport) + tvFaultCancel = mFloatLayout.findViewById(R.id.tvFaultCancel) + rvFaultList = mFloatLayout.findViewById(R.id.rvFaultList) + tvUploadSuccess = mFloatLayout.findViewById(R.id.tvUploadSuccess) + faultReasonGroup = mFloatLayout.findViewById(R.id.faultReasonGroup) + } + + @OptIn(DelicateCoroutinesApi::class) + @SuppressLint("SetTextI18n") + private fun initEvent(){ + //弹窗展示时间 + tvFaultTime.text = mActivity.resources.getString(R.string.take_over_time) + + millis2String(System.currentTimeMillis(), TimeUtils.getHourMinSecondFormat()) + //发生时间 + tvOccurrenceTime.text = millis2String(workOrderOccurrenceTime, TimeUtils.getHourMinFormat()) + ivTimeReduce.setOnClickListener { + workOrderOccurrenceTime -= 60000 + tvOccurrenceTime.text = millis2String(workOrderOccurrenceTime, TimeUtils.getHourMinFormat()) + } + ivTimeAdd.setOnClickListener { + if(workOrderOccurrenceTime + 60000 > System.currentTimeMillis()){ + ToastUtils.showShort("发生时间应在当前时间之前") + return@setOnClickListener + } + workOrderOccurrenceTime += 60000 + tvOccurrenceTime.text = millis2String(workOrderOccurrenceTime, TimeUtils.getHourMinFormat()) + } + //补充描述 + etNoteInput.onFocusChangeListener = OnFocusChangeListener { v, hasFocus -> + val edit = v as EditText + if(hasFocus){ + edit.hint = "" + }else{ + edit.hint = "手动输入" + } + } + etNoteInput.addTextChangedListener(object: TextWatcher{ + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + override fun afterTextChanged(s: Editable?) { + + } + + }) + //问题描述录音 + ivNoteAudio.setOnClickListener { + audioStatus = !audioStatus + setAudio(audioStatus) + } + //上报 + tvFaultReport.setOnClickListener{ + //TODO + } + //取消 + tvFaultCancel.setOnClickListener { + hideFloatWindow() + } + + } + + private fun setAudio(status: Boolean){ + if(status){ + //开始录音 + mIat?.let { + //清空之前的内容 + mIatResults.clear() + SpeechUtils.setParam(it) + // 不显示听写对话框 + ret = it.startListening(mRecognizerListener) + if (ret != ErrorCode.SUCCESS) { + ToastUtils.showShort("听写失败,错误码:$ret,请点击网址https://www.xfyun.cn/document/error-code查询解决方案") + } + } + //开始录音,展示放大缩小动效 + val scaleAnimation = ScaleAnimation( + 1.0f, 0.8f, 1.0f, 0.8f, + Animation.RELATIVE_TO_SELF, 0.8f, Animation.RELATIVE_TO_SELF, 0.8f + ) + scaleAnimation.duration = 1000 + scaleAnimation.repeatCount = -1 + ivNoteAudio.startAnimation(scaleAnimation) + }else{ + //停止语音听写 + mIat?.stopListening() + //结束动画 + ivNoteAudio.clearAnimation() + } + } + + /** + * 初始化监听器。 + */ + private val mInitListener = InitListener { code -> + if (code != ErrorCode.SUCCESS) { + ToastUtils.showShort("讯飞语音听写初始化失败,错误码:$code") + } + } + + /** + * 听写监听器。 + */ + private val mRecognizerListener: RecognizerListener = object : RecognizerListener{ + override fun onVolumeChanged(p0: Int, p1: ByteArray?) { + //showTip("当前正在说话,音量大小 = " + volume + " 返回音频数据 = " + data.length); + } + + override fun onBeginOfSpeech() { + // 此回调表示:sdk内部录音机已经准备好了,用户可以开始语音输入 + } + + override fun onEndOfSpeech() { + // 此回调表示:检测到了语音的尾端点,已经进入识别过程,不再接受语音输入 + } + + override fun onResult(results: RecognizerResult?, isLast: Boolean) { + results?.let { + printResult(it) + } + } + + override fun onError(p0: SpeechError?) { + // Tips: + // 错误码:10118(您没有说话),可能是录音机权限被禁,需要提示用户打开应用的录音权限。 + } + + override fun onEvent(p0: Int, p1: Int, p2: Int, p3: Bundle?) { + // 以下代码用于获取与云端的会话id,当业务出错时将会话id提供给技术支持人员,可用于查询会话日志,定位出错原因 + // 若使用本地能力,会话id为null + // if (SpeechEvent.EVENT_SESSION_ID == eventType) { + // String sid = obj.getString(SpeechEvent.KEY_EVENT_SESSION_ID); + // Log.d(TAG, "session id =" + sid); + // } + } + + } + + /** + * 显示结果 + */ + @SuppressLint("SetTextI18n") + private fun printResult(results: RecognizerResult) { + val text: String = JsonParser.parseIatResult(results.resultString) + Log.i(TAG, "语音内容=$text") + if(text.isNotEmpty()){ + if(etNoteInput.text.toString().isEmpty()){ + etNoteInput.setText(text) + etNoteInput.setSelection(text.length) + }else{ + val startStr = etNoteInput.text.toString().substring(0,etNoteInput.selectionStart) + val endStr = etNoteInput.text.toString().substring(etNoteInput.selectionEnd,etNoteInput.text.toString().length) + etNoteInput.setText(startStr+text+endStr) + etNoteInput.setSelection(startStr.length+text.length) + } + + } + } + + + @SuppressLint("ClickableViewAccessibility") + override fun onTouch(v: View?, motionEvent: MotionEvent?): Boolean { + when (motionEvent?.action) { + MotionEvent.ACTION_DOWN -> { + // 获取相对View的坐标,即以此View左上角为原点 + mInViewX = motionEvent.x + mInViewY = motionEvent.y + // 获取相对屏幕的坐标,即以屏幕左上角为原点 + mInScreenX = motionEvent.rawX + mInScreenY = motionEvent.rawY + } + MotionEvent.ACTION_MOVE -> { + // 更新浮动窗口位置参数 + mInScreenX = motionEvent.rawX + mInScreenY = motionEvent.rawY + if(((mInScreenX - mInViewX)-mWindowParams!!.x).absoluteValue>150 || ((mInScreenY - mInViewY)-mWindowParams!!.y).absoluteValue>150){ + return true + } + mWindowParams!!.x = (mInScreenX - mInViewX).toInt() + mWindowParams!!.y = (mInScreenY - mInViewY).toInt() + // 手指移动的时候更新小悬浮窗的位置 + mWindowManager!!.updateViewLayout(mFloatLayout, mWindowParams) + } + } + return true + } + + fun showFloatWindow() { + if (mFloatLayout.parent == null) { + val metrics = DisplayMetrics() + // 默认固定位置,靠屏幕右边缘的中间 + mWindowManager!!.defaultDisplay.getMetrics(metrics) + mWindowParams!!.x = metrics.widthPixels-890 + mWindowParams!!.y = metrics.heightPixels - BarUtils.getStatusBarHeight()-1140 + mWindowManager!!.addView(mFloatLayout, mWindowParams) + + + } + } + + fun hideFloatWindow() { + if (mFloatLayout.parent != null){ + mWindowManager!!.removeView(mFloatLayout) + } + CallerDevaToolsListenerManager.removeListener(TAG) + } + + fun setClickListener(clickListener: ClickListener) { + this.clickListener = clickListener + } + + interface ClickListener { + fun closeWindow() + } + +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/TakeOverReasonWindow.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/TakeOverReasonWindow.kt index 588ed999dd..e5110e6f51 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/TakeOverReasonWindow.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/TakeOverReasonWindow.kt @@ -105,7 +105,7 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene it.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL it.gravity = Gravity.START or Gravity.TOP it.width = 844 - it.height = 991 + it.height = 846 it.alpha = 1.0f } } diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/TakeOverRecordView.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/TakeOverRecordView.kt index 91b665f12e..dcb6d4d8a7 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/TakeOverRecordView.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/TakeOverRecordView.kt @@ -4,15 +4,24 @@ import android.content.Context import android.util.AttributeSet import android.view.LayoutInflater 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.util.TimeUtils +import com.mogo.eagle.core.utilcode.util.TimeUtils.getYMDFormat 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.rvTakeOverList +import kotlinx.android.synthetic.main.view_take_over_record.view.tvDeleteSelect +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 import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch +import me.jessyan.autosize.utils.AutoSizeUtils /** * 接管信息管理页面 @@ -40,15 +49,86 @@ class TakeOverRecordView @JvmOverloads constructor( ivTakeOverRecordClose.setOnClickListener { clickListener?.onClose() } - takeOverListAdapter = TakeOverListAdapter() + //接管记录日期 + tvTakeOverRecordDate.text = TimeUtils.millis2String(System.currentTimeMillis(), getYMDFormat()) val linearLayoutManager = LinearLayoutManager(context) rvTakeOverList.layoutManager = linearLayoutManager + takeOverListAdapter = TakeOverListAdapter(context) + takeOverListAdapter?.setListener(object: TakeOverListAdapter.RecordClickListener{ + override fun onEditRecord(takeOverRecordInfo: TakeOverRecordInfo) { + //展示接管原因窗口 + val activity = context as? FragmentActivity + ?: throw IllegalStateException("please ensure context is FragmentActivity.") + val takeOverReasonWindow = TakeOverReasonWindow(activity) + takeOverReasonWindow.showFloatWindow() + } + }) + rvTakeOverList.addItemDecoration( + BottomDecoration( + AutoSizeUtils.dp2px(context, 194f) + ) + ) rvTakeOverList.adapter = takeOverListAdapter - GlobalScope.launch(Dispatchers.IO){ - CallerTakeOverManager.getAllRecord(context) - } + val list = ArrayList() +// 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 { + val takeOverRecordInfoOne = TakeOverRecordInfo(System.currentTimeMillis().toString(),"环球贸易中心",1,2,3,"lineName","描述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) + + + CallerTakeOverManager.insertRecord(context,takeOverRecordInfoOne) + CallerTakeOverManager.insertRecord(context,takeOverRecordInfoTwo) + CallerTakeOverManager.insertRecord(context,takeOverRecordInfoThree) + CallerTakeOverManager.insertRecord(context,takeOverRecordInfoFour) + CallerTakeOverManager.insertRecord(context,takeOverRecordInfoFive) + CallerTakeOverManager.insertRecord(context,takeOverRecordInfoSix) + CallerTakeOverManager.insertRecord(context,takeOverRecordInfoSeven) + CallerTakeOverManager.insertRecord(context,takeOverRecordInfoEight) + CallerTakeOverManager.insertRecord(context,takeOverRecordInfoNine) + CallerTakeOverManager.insertRecord(context,takeOverRecordInfoTen) + } + //删除 + tvDeleteSelect.setOnClickListener { +// CallerTakeOverManager.deleteRecord(context,) + } } fun setOnClickListener(clickListener: ClickListener) { diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/adapter/BottomDecoration.java b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/adapter/BottomDecoration.java new file mode 100644 index 0000000000..512c91ba8c --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/adapter/BottomDecoration.java @@ -0,0 +1,39 @@ +package com.zhjt.mogo_core_function_devatools.workorder.adapter; + +import android.graphics.Rect; +import android.view.View; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import java.util.Objects; + +public class BottomDecoration extends RecyclerView.ItemDecoration { + /** + * 第一个视图和最后一个视图偏移的距离 + */ + public static int distance = 0; + + /** + * 设置RecyclerView子视图的边距,本示例仅用于定义两个子视图之间的边距,为space*2 + */ + public BottomDecoration(int distance) { + BottomDecoration.distance = distance; + } + + @Override + public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { + int pos = parent.getChildAdapterPosition(view); + RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams)view.getLayoutParams(); + + //通过设置Item左右边距实现第一个左侧和最后一个右侧设置边距,确保显示的视图位于屏幕中间 + int itemCount = Objects.requireNonNull(parent.getAdapter()).getItemCount(); + if(pos == itemCount-1){ + layoutParams.setMargins(0,0,0,distance); + }else { + layoutParams.setMargins(0,0,0,0); + } + view.setLayoutParams(layoutParams); + super.getItemOffsets(outRect, view, parent, state); + } +} diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/adapter/TakeOverListAdapter.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/adapter/TakeOverListAdapter.kt index 3eff0b4be8..5bf2d30005 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/adapter/TakeOverListAdapter.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/adapter/TakeOverListAdapter.kt @@ -1,21 +1,25 @@ package com.zhjt.mogo_core_function_devatools.workorder.adapter +import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.CheckBox import android.widget.ImageView 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.ToastUtils import com.zhjt.mogo_core_function_devatools.R /** * 接管记录适配器 */ -class TakeOverListAdapter: RecyclerView.Adapter() { +class TakeOverListAdapter(private val context: Context): RecyclerView.Adapter() { private var data:List ?= null + private var clickListener: RecordClickListener ?= null fun setData(data: List){ this.data = data @@ -31,6 +35,32 @@ class TakeOverListAdapter: RecyclerView.Adapter + android:drawable="@drawable/icon_record_check_false" /> + android:drawable="@drawable/icon_record_check_true" /> \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/item_take_over_record.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/item_take_over_record.xml index 0e24c865bc..3963cc4126 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/item_take_over_record.xml +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/item_take_over_record.xml @@ -6,12 +6,13 @@ + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/view_fault_reason.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/view_fault_reason.xml new file mode 100644 index 0000000000..33fda05378 --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/view_fault_reason.xml @@ -0,0 +1,363 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/view_take_over_record.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/view_take_over_record.xml index 2cc90ddbf1..b5db31cebe 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/view_take_over_record.xml +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/view_take_over_record.xml @@ -3,7 +3,7 @@ android:layout_width="@dimen/dp_960" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" - android:background="#F0151D41"> + android:background="@drawable/bg_take_over_record">