From 1e50bc7f8c0ba8bb8544fc2826bd86540dd05167 Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Thu, 16 Nov 2023 18:33:02 +0800 Subject: [PATCH] =?UTF-8?q?[6.2.0]=E5=BD=95=E5=8C=85=E5=B7=A5=E5=85=B7?= =?UTF-8?q?=E8=A2=AB=E5=8A=A8=E5=BD=95=E5=8C=85=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../badcase/biz/PassiveBadCaseWindow.kt | 131 ++++++++++++++---- .../main/res/layout/view_passive_bad_case.xml | 53 ++++--- 2 files changed, 137 insertions(+), 47 deletions(-) diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/PassiveBadCaseWindow.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/PassiveBadCaseWindow.kt index c2fdb14ac3..85832e26f5 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/PassiveBadCaseWindow.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/PassiveBadCaseWindow.kt @@ -10,10 +10,14 @@ import android.os.Handler import android.util.DisplayMetrics import android.util.Log import android.view.* +import android.view.animation.Animation +import android.view.animation.ScaleAnimation import android.widget.CheckBox import android.widget.CompoundButton import android.widget.ImageView import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView import com.google.android.flexbox.FlexboxLayout import com.iflytek.cloud.ErrorCode import com.iflytek.cloud.InitListener @@ -25,10 +29,13 @@ import com.mogo.cloud.passport.MoGoAiCloudClientConfig import com.mogo.eagle.core.data.app.AppConfigInfo import com.mogo.eagle.core.data.deva.badcase.BagDescriptionEntity import com.mogo.eagle.core.data.deva.badcase.BagManagerEntity +import com.mogo.eagle.core.data.deva.badcase.RecordOptionEntity import com.mogo.eagle.core.data.msgbox.MsgBoxBean import com.mogo.eagle.core.data.msgbox.RecordBagMsg +import com.mogo.eagle.core.function.api.devatools.badcase.BadCaseNetListener import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager +import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsNetManager import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_DEVA @@ -46,11 +53,16 @@ import kotlinx.coroutines.launch import com.zhidao.loglib.upload.UploadManager import com.zhidao.loglib.util.FileUtil import com.zhjt.mogo_core_function_devatools.badcase.BadCaseAnalyticsManager +import com.zhjt.mogo_core_function_devatools.badcase.biz.adapter.BadReasonListAdapter +import com.zhjt.mogo_core_function_devatools.badcase.repository.net.api.BadCaseNetManager +import com.zhjt.mogo_core_function_devatools.badcase.repository.store.BadCaseReasonStore import me.jessyan.autosize.utils.AutoSizeUtils import org.greenrobot.eventbus.EventBus +import org.json.JSONArray import org.json.JSONException import org.json.JSONObject import java.io.File +import java.lang.StringBuilder /** * @author XuXinChao @@ -58,7 +70,7 @@ import java.io.File * @since: 2022/7/17 */ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListener, - CompoundButton.OnCheckedChangeListener { + BadCaseNetListener { companion object { const val TAG = "PassiveBadCaseWindow" @@ -74,13 +86,16 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene private var bagManagerEntity: BagManagerEntity = BagManagerEntity() - private var uploadReason: String = String() //上报原因,标签 + private var uploadReason: StringBuilder = StringBuilder() //上报原因,标签 private var recordKey: String?=null //录制bag包key private var recordFileName: String?=null //录制文件包名 private var receiveTime: String ?= null //接收时间 private var stat: String = "" private var boxBean: MsgBoxBean ?= null + private lateinit var rvPassiveList : RecyclerView + private var badReasonListAdapter: BadReasonListAdapter?= null + private var mInViewX = 0f private var mInViewY = 0f private var mDownInScreenX = 0f @@ -95,6 +110,7 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene private lateinit var tvPassiveTime: TextView private lateinit var tvPassiveIdentity: TextView + private lateinit var viewAudioBg: ImageView private lateinit var viewAudioButton: ImageView private lateinit var tvAudioCountDown: TextView @@ -131,10 +147,34 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene tvPassiveNum = mFloatLayout.findViewById(R.id.tvPassiveNum) tvPassiveTime = mFloatLayout.findViewById(R.id.tvPassiveTime) tvPassiveIdentity = mFloatLayout.findViewById(R.id.tvPassiveIdentity) + viewAudioBg = mFloatLayout.findViewById(R.id.viewAudioBg) viewAudioButton = mFloatLayout.findViewById(R.id.viewAudioButton) tvAudioCountDown = mFloatLayout.findViewById(R.id.tvAudioCountDown) tvPassiveReport = mFloatLayout.findViewById(R.id.tvPassiveReport) tvPassiveCancel = mFloatLayout.findViewById(R.id.tvPassiveCancel) + rvPassiveList = mFloatLayout.findViewById(R.id.rvPassiveList) + val linearLayoutManager = LinearLayoutManager(mActivity) + linearLayoutManager.orientation = LinearLayoutManager.VERTICAL + rvPassiveList.layoutManager = linearLayoutManager + badReasonListAdapter = BadReasonListAdapter(mActivity) + badReasonListAdapter?.setListener(object: BadReasonListAdapter.ReasonClickListener{ + override fun onClick(reason: String, isChecked: Boolean) { + if(isChecked){ + uploadReason.append(reason) + }else{ + val index = uploadReason.indexOf(reason) + uploadReason.delete(index,index+reason.length) + } + } + }) + rvPassiveList.adapter = badReasonListAdapter + + /** + * 获取录包原因数据 + */ +// BadCaseNetManager.badCaseNetManager.getRecordOption(1,AppConfigInfo.iPCMacAddress) + BadCaseNetManager.badCaseNetManager.getRecordOption(2,"48:b0:2d:3a:9c:8f") + CallerDevaToolsNetManager.addListener(this.hashCode().toString(),this) if(BadCaseConfig.windowNum<1){ BadCaseConfig.windowNum = 1 } @@ -142,7 +182,7 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene BadCaseConfig.windowNum++ tvPassiveTime.text = "时间:${millis2String(System.currentTimeMillis(),TimeUtils.getHourMinSecondFormat())}" tvPassiveIdentity.text = "身份:${BadCaseConfig.identity}" - viewAudioButton.setOnClickListener { + viewAudioBg.setOnClickListener { audioStatus = !audioStatus setAudio(audioStatus) } @@ -272,8 +312,15 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene } audioFileName = "Audio_${System.currentTimeMillis()}_BadCase" RecordManager.getInstance().start(audioFileName) - //更改录音按钮背景 - viewAudioButton.setImageResource(R.drawable.icon_bad_case_audio_select) + //开始录音,展示放大缩小动效 + val scaleAnimation = ScaleAnimation( + 1.0f, 0.9f, 1.0f, 0.9f, + Animation.RELATIVE_TO_SELF, 0.9f, Animation.RELATIVE_TO_SELF, 0.9f + ) + scaleAnimation.duration = 1000 + scaleAnimation.repeatCount = -1 + viewAudioButton.startAnimation(scaleAnimation) + tvAudioCountDown.visibility = View.VISIBLE //开始倒计时 if(countDownTimer==null){ @@ -287,9 +334,8 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene tvAudioCountDown.visibility = View.GONE //结束录音 RecordManager.getInstance().stop() - //更改录音按钮背景 - //TODO -// viewAudioButton.setImageResource(R.drawable.icon_bad_case_audio_normal) + //结束动画 + viewAudioButton.clearAnimation() } } countDownTimer?.start() @@ -361,7 +407,7 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene itx["filesize"] = "0" //bag包文件大小 itx["key"] = recordKey?:"" //key if(reasonDetail.isNullOrEmpty()){ - itx["reason"] = uploadReason + itx["reason"] = uploadReason.toString() }else{ itx["reason"] = "$uploadReason 语音内容:$reasonDetail" //采集原因 } @@ -383,7 +429,7 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene //将上报BI的结果同步给工控机记录保存 recordKey?.let { val hasAudio = downloadUrl != null - val descReqEntity = BagDescriptionEntity(uploadReason,hasAudio,downloadUrl.toString(),true) + val descReqEntity = BagDescriptionEntity(uploadReason.toString(),hasAudio,downloadUrl.toString(),true) bagManagerEntity.reqType = 5 bagManagerEntity.keyReq = it.toLong() bagManagerEntity.descReq = descReqEntity @@ -394,7 +440,7 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene BadCaseAnalyticsManager.bagRecordUpload(recordKey?:"",recordFileName?:"",receiveTime?:System.currentTimeMillis().toString(), stat,AppConfigInfo.plateNumber,BadCaseConfig.totalDuration.toString(),MoGoAiCloudClientConfig.getInstance().sn, BadCaseConfig.dockerVersion ?:"",AppUtils.getAppVersionName(),loc.latitude.toString(),loc.longitude.toString(), - BadCaseConfig.identity,downloadUrl?:"",uploadReason,System.currentTimeMillis().toString(),"0") + BadCaseConfig.identity,downloadUrl?:"",uploadReason.toString(),System.currentTimeMillis().toString(),"0") //日志 CallerLogger.i("$M_DEVA$TAG", "BadCase Passive Analytics="+"key="+recordKey+" filename="+recordFileName+ " receiveTime="+receiveTime+" stat="+"100"+" plateNumber="+AppConfigInfo.plateNumber+ @@ -445,30 +491,18 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene val metrics = DisplayMetrics() // 默认固定位置,靠屏幕右边缘的中间 mWindowManager!!.defaultDisplay.getMetrics(metrics) - mWindowParams!!.x = metrics.widthPixels +// mWindowParams!!.x = metrics.widthPixels + mWindowParams!!.x = 0 mWindowParams!!.y = metrics.heightPixels - BarUtils.getStatusBarHeight()-950 mWindowManager!!.addView(mFloatLayout, mWindowParams) } } - override fun onCheckedChanged(buttonView: CompoundButton?, isChecked: Boolean) { - buttonView?.text?.let { - if(isChecked){ - if(!uploadReason.contains(it)){ - uploadReason += it - } - }else{ - if(uploadReason.contains(it)){ - uploadReason = uploadReason.replace(it.toString(),"") - } - } - - } - } - fun hideFloatWindow() { + //注销采集原因回调监听 + CallerDevaToolsNetManager.removeListener(this.hashCode().toString()) // 移除 ADAS车辆状态&定位 监听 if (mFloatLayout.parent != null) mWindowManager!!.removeView(mFloatLayout) } @@ -490,4 +524,47 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene fun closeWindow() } + override fun onPassiveResponse(list: List) { + if(list.isNotEmpty()){ + badReasonListAdapter?.setData(list) + } + } + + override fun onPassiveError() { + if(BadCaseReasonStore.getPassiveDataRecord().isNotEmpty()){ + val list = ArrayList() + val result = JSONArray(BadCaseReasonStore.getPassiveDataRecord()) + if(result.length() > 0){ + for(i in 0 until result.length()){ + val entity = RecordOptionEntity() + val jsonObject = result[i] as JSONObject + val optionName = jsonObject.optString("optionName") + entity.optionName = optionName + val optionCode = jsonObject.optString("optionCode") + entity.optionCode = optionCode + val children = jsonObject.optJSONArray("children") + if (children != null) { + if(children.length() > 0){ + for(index in 0 until children.length()){ + val childJson = children[index] as JSONObject + val child = RecordOptionEntity() + val childOptionNme = childJson.optString("optionName") + val childOptionCode = childJson.optString("optionCode") + child.optionName = childOptionNme + child.optionCode = childOptionCode + entity.children.add(child) + } + } + } + list.add(entity) + } + } + if(list.isNotEmpty()){ + badReasonListAdapter?.setData(list) + } + }else{ + ToastUtils.showShort("被动录包数据采集错误且无缓存数据可用") + } + } + } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/view_passive_bad_case.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/view_passive_bad_case.xml index bd7b217bc9..4178a3b155 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/view_passive_bad_case.xml +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/view_passive_bad_case.xml @@ -2,26 +2,26 @@ @@ -34,7 +34,7 @@ app:layout_constraintTop_toTopOf="@id/tvPassiveNum" app:layout_constraintBottom_toBottomOf="@id/tvPassiveNum" android:textColor="#FFFFFFFF" - android:textSize="38dp" + android:textSize="@dimen/sp_34" android:layout_marginStart="@dimen/dp_50" /> @@ -46,35 +46,48 @@ app:layout_constraintBottom_toBottomOf="@id/tvPassiveNum" app:layout_constraintRight_toRightOf="parent" android:textColor="#FFFFFFFF" - android:textSize="38dp" + android:textSize="@dimen/sp_34" android:layout_marginEnd="@dimen/dp_50" /> + +