From 6f84a25fcb5a2ddaf2dd4ac324419f72a5365834 Mon Sep 17 00:00:00 2001 From: donghongyu Date: Thu, 24 Feb 2022 20:39:15 +0800 Subject: [PATCH] =?UTF-8?q?[Change]=20=E5=A2=9E=E5=8A=A0=E4=BA=86=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E5=90=AF=E5=8A=A8OTG=E7=9B=B4=E6=92=AD=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: donghongyu --- .../core/function/hmi/ui/MoGoHmiFragment.kt | 219 ++++++++++-------- .../hmi/ui/carcorder/CarcorderPreviewView.kt | 2 +- 2 files changed, 117 insertions(+), 104 deletions(-) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt index 952cc5fe00..d78419162c 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt @@ -5,12 +5,16 @@ import android.os.Bundle import android.os.Handler import android.text.TextUtils import android.util.Log -import android.view.* +import android.view.Gravity +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager import android.view.animation.OvershootInterpolator import androidx.lifecycle.Lifecycle.Event.ON_DESTROY import androidx.lifecycle.LifecycleEventObserver import androidx.lifecycle.lifecycleScope -import androidx.transition.* +import androidx.transition.AutoTransition +import androidx.transition.TransitionManager import com.alibaba.android.arouter.facade.annotation.Route import com.mogo.cloud.passport.MoGoAiCloudClientConfig import com.mogo.commons.mvp.MvpFragment @@ -117,7 +121,8 @@ class MoGoHmiFragment : MvpFragment Log.d("QQQ", "-- step -- 1 --") var oldT = try { old?.timestamp?.takeIf { it.isNotBlank() }?.let { - SimpleDateFormat("yyyyMMddHHmmss", Locale.getDefault()).parse(it)?.time ?: 0L + SimpleDateFormat("yyyyMMddHHmmss", Locale.getDefault()).parse(it)?.time + ?: 0L } ?: 0L } catch (t: Throwable) { t.printStackTrace() @@ -127,30 +132,31 @@ class MoGoHmiFragment : MvpFragment var newT = try { it.receive()?.also { record = it }?.timestamp?.takeIf { it.isNotBlank() }?.let { SimpleDateFormat("yyyyMMddHHmmss", Locale.getDefault()).parse(it)?.time - ?: 0L + ?: 0L } ?: 0L } catch (t: Throwable) { t.printStackTrace() 0L } - if (oldT == 0L || (newT > 0L && (newT - oldT > 0L) && (newT - oldT) < CASE_EXPIRE_DURATION)) { + if (oldT == 0L || (newT > 0L && (newT - oldT > 0L) && (newT - oldT) < CASE_EXPIRE_DURATION)) { Log.d("QQQ", "-- step -- 2 --") record?.takeIf { it.key != old?.key && it.timestamp != old?.timestamp }?.also { - Log.d("QQQ", "record: [$record] is displaying and consuming ~~~" ) + Log.d("QQQ", "record: [$record] is displaying and consuming ~~~") showBadCaseEntrance(it) } continue } while (oldT != 0L && newT != 0L && (newT - oldT) >= CASE_EXPIRE_DURATION) { - Log.d("QQQ", "record: [$record] has been discarded, because it has been timeout." ) + Log.d("QQQ", "record: [$record] has been discarded, because it has been timeout.") oldT = newT newT = try { it.receive()?.also { record = it }?.timestamp?.takeIf { it.isNotBlank() }?.let { - SimpleDateFormat("yyyyMMddHHmmss", Locale.getDefault()).parse(it)?.time ?: 0L + SimpleDateFormat("yyyyMMddHHmmss", Locale.getDefault()).parse(it)?.time + ?: 0L } ?: 0L } catch (t: Throwable) { t.printStackTrace() @@ -158,7 +164,7 @@ class MoGoHmiFragment : MvpFragment } } record?.takeIf { it.key != old?.key && it.timestamp != old?.timestamp }?.also { - Log.d("QQQ", "record: [$record] is displaying for rest ..." ) + Log.d("QQQ", "record: [$record] is displaying for rest ...") showBadCaseEntrance(it) } } else { @@ -170,7 +176,7 @@ class MoGoHmiFragment : MvpFragment it.visibility = View.VISIBLE } } - Log.d("QQQ", "record: [$old] hasn't been consumed~~~~" ) + Log.d("QQQ", "record: [$old] hasn't been consumed~~~~") } } finally { delay(1000) @@ -265,6 +271,11 @@ class MoGoHmiFragment : MvpFragment } } } + + // TODO 这里后面需要改成独立进程通讯后台获取YUV + view.postDelayed({ + activity?.let { CarcorderPreviewView.show(it) } + }, 1000) } @OptIn(ExperimentalCoroutinesApi::class) @@ -358,15 +369,15 @@ class MoGoHmiFragment : MvpFragment * @param msg */ override fun showDockerRebootResult(code: Int, msg: String) { - ThreadUtils.runOnUiThread{ - if(code>=-1){ + ThreadUtils.runOnUiThread { + if (code >= -1) { //重启成功 ToastUtils.showShort("重启成功") - }else{ + } else { //重启失败 msg?.let { ToastUtils.showShort(it) - } + } } } } @@ -378,7 +389,7 @@ class MoGoHmiFragment : MvpFragment if (autoPilotBadCaseView == null) { autoPilotBadCaseView = AutoPilotBadCaseView(it).also { itx -> val record = - autoPilotBadCaseEntrance?.getTag(R.id.autopilot_badcase_record) as? AutoPilotRecordResult + autoPilotBadCaseEntrance?.getTag(R.id.autopilot_badcase_record) as? AutoPilotRecordResult itx.tag = record itx.onDismiss { dismissBadCaseFloatView() @@ -389,12 +400,13 @@ class MoGoHmiFragment : MvpFragment val params = mutableMapOf() autoPilotBadCaseEntrance?.apply { params["carLicense"] = - MoGoAiCloudClientConfig.getInstance().sn + MoGoAiCloudClientConfig.getInstance().sn params["filename"] = record?.fileName ?: "" params["filesize"] = record?.total.toString() params["key"] = record?.key ?: "" params["reason"] = it.reason ?: "" - params["duration"] = record?.duration?.toInt()?.toString() ?: "" + params["duration"] = record?.duration?.toInt()?.toString() + ?: "" params["timestamp"] = record?.timestamp ?: "" } val response = post(params) @@ -409,9 +421,9 @@ class MoGoHmiFragment : MvpFragment dismissBadCaseFloatView() dismiss?.invoke() CallerAutoPilotManager.recordCause( - record?.key, - record?.fileName, - it.id, it.reason) + record?.key, + record?.fileName, + it.id, it.reason) ToastUtils.showShort("接管反馈成功~") record?.also { it.consumed = true @@ -437,39 +449,39 @@ class MoGoHmiFragment : MvpFragment } } autoPilotToolsFloat = WarningFloat.with(it) - .setTag("BadCaseCollectFloat") - .setLayout(autoPilotBadCaseView!!) - .setSidePattern(SidePattern.LEFT) - .setGravity(Gravity.LEFT, offsetY = 72) - .setImmersionStatusBar(true) - .setAnimator(object : DefaultAnimator() { - override fun enterAnim( - view: View, - params: WindowManager.LayoutParams, - windowManager: WindowManager, - sidePattern: SidePattern - ): Animator? = - super.enterAnim(view, params, windowManager, sidePattern) - ?.apply { - interpolator = OvershootInterpolator() - } + .setTag("BadCaseCollectFloat") + .setLayout(autoPilotBadCaseView!!) + .setSidePattern(SidePattern.LEFT) + .setGravity(Gravity.LEFT, offsetY = 72) + .setImmersionStatusBar(true) + .setAnimator(object : DefaultAnimator() { + override fun enterAnim( + view: View, + params: WindowManager.LayoutParams, + windowManager: WindowManager, + sidePattern: SidePattern + ): Animator? = + super.enterAnim(view, params, windowManager, sidePattern) + ?.apply { + interpolator = OvershootInterpolator() + } - override fun exitAnim( - view: View, - params: WindowManager.LayoutParams, - windowManager: WindowManager, - sidePattern: SidePattern - ): Animator? = - super.exitAnim(view, params, windowManager, sidePattern) - ?.setDuration(200) - }) - .addWarningStatusListener(object : IMoGoWarningStatusListener { - override fun onDismiss() { - autoPilotToolsFloat = null - autoPilotBadCaseView = null - } - }) - .show() + override fun exitAnim( + view: View, + params: WindowManager.LayoutParams, + windowManager: WindowManager, + sidePattern: SidePattern + ): Animator? = + super.exitAnim(view, params, windowManager, sidePattern) + ?.setDuration(200) + }) + .addWarningStatusListener(object : IMoGoWarningStatusListener { + override fun onDismiss() { + autoPilotToolsFloat = null + autoPilotBadCaseView = null + } + }) + .show() } else { autoPilotToolsFloat?.show() } @@ -669,7 +681,8 @@ class MoGoHmiFragment : MvpFragment if (floatWindow == null || TextUtils.isEmpty(showTag) || !floatWindow.isShow() || floatWindow.config.floatTag != tag) { val notificationView = V2XNotificationView(it) notificationView.setWarningIcon(EventTypeEnum.getWarningIcon(v2xType.toString())) - val warningContent = alertContent ?: EventTypeEnum.getWarningContent(v2xType.toString()) + val warningContent = alertContent + ?: EventTypeEnum.getWarningContent(v2xType.toString()) if (warningContent.isEmpty()) { Logger.e(TAG, "Show warningContent is null or empty!") return@launchWhenResumed @@ -680,48 +693,48 @@ class MoGoHmiFragment : MvpFragment WarningFloat.dismiss(floatWindow.config.floatTag, true) } mWarningFloat = WarningFloat.with(it) - .setTag(tag) - .setLayout(notificationView) - .setSidePattern(SidePattern.RESULT_TOP) - .setCountDownTime(expireTime) - .setGravity(Gravity.CENTER_HORIZONTAL, offsetY = 110) - .setImmersionStatusBar(true) - .isEnqueue(true) - .addWarningStatusListener(listenerIMoGo) - .addWarningStatusListener(object : IMoGoWarningStatusListener { - override fun onShow() { - // 创建弹窗成功才进行TTS播报 - Logger.d( - "MoGoWarningFragment", - "mWarningFloat = $mWarningFloat---ttsContent = $ttsContent" - ) - if (mWarningFloat != null && !TextUtils.isEmpty(ttsContent) && playTts) { - Logger.d("MoGoWarningFragment", "---> ttsContent = $ttsContent") - AIAssist.getInstance(activity) - .speakTTSVoice(ttsContent) - } - } - }) - .setAnimator(object : DefaultAnimator() { - override fun enterAnim( - view: View, - params: WindowManager.LayoutParams, - windowManager: WindowManager, - sidePattern: SidePattern - ): Animator? = - super.enterAnim(view, params, windowManager, sidePattern)?.apply { - interpolator = OvershootInterpolator() + .setTag(tag) + .setLayout(notificationView) + .setSidePattern(SidePattern.RESULT_TOP) + .setCountDownTime(expireTime) + .setGravity(Gravity.CENTER_HORIZONTAL, offsetY = 110) + .setImmersionStatusBar(true) + .isEnqueue(true) + .addWarningStatusListener(listenerIMoGo) + .addWarningStatusListener(object : IMoGoWarningStatusListener { + override fun onShow() { + // 创建弹窗成功才进行TTS播报 + Logger.d( + "MoGoWarningFragment", + "mWarningFloat = $mWarningFloat---ttsContent = $ttsContent" + ) + if (mWarningFloat != null && !TextUtils.isEmpty(ttsContent) && playTts) { + Logger.d("MoGoWarningFragment", "---> ttsContent = $ttsContent") + AIAssist.getInstance(activity) + .speakTTSVoice(ttsContent) + } } + }) + .setAnimator(object : DefaultAnimator() { + override fun enterAnim( + view: View, + params: WindowManager.LayoutParams, + windowManager: WindowManager, + sidePattern: SidePattern + ): Animator? = + super.enterAnim(view, params, windowManager, sidePattern)?.apply { + interpolator = OvershootInterpolator() + } - override fun exitAnim( - view: View, - params: WindowManager.LayoutParams, - windowManager: WindowManager, - sidePattern: SidePattern - ): Animator? = - super.exitAnim(view, params, windowManager, sidePattern)?.setDuration(200) - }) - .show() + override fun exitAnim( + view: View, + params: WindowManager.LayoutParams, + windowManager: WindowManager, + sidePattern: SidePattern + ): Animator? = + super.exitAnim(view, params, windowManager, sidePattern)?.setDuration(200) + }) + .show() } else { val notification = floatWindow.config.layoutView as? V2XNotificationView if (alertContent?.isNotEmpty() == true) { @@ -1073,22 +1086,22 @@ class MoGoHmiFragment : MvpFragment * @param upgradeStatus 升级状态 */ override fun showAdUpgradeStatus( - upgradeMode: Int, - downloadStatus: Int, - currentProgress: Int, - totalProgress: Int, - downloadVersion: String, - upgradeStatus: Int + upgradeMode: Int, + downloadStatus: Int, + currentProgress: Int, + totalProgress: Int, + downloadVersion: String, + upgradeStatus: Int ) { - ThreadUtils.runOnUiThread{ + ThreadUtils.runOnUiThread { //如果工控机处于“下载中”、“可升级(下载完成)”、“升级中”、“升级失败”状态时,工具箱入口显示红色角标 - if(AdUpgradeStateHelper.showUpgradeTips(downloadStatus, upgradeStatus)){ + if (AdUpgradeStateHelper.showUpgradeTips(downloadStatus, upgradeStatus)) { viewUpgradeTips.visibility = View.VISIBLE - }else{ + } else { viewUpgradeTips.visibility = View.GONE } //将状态同步到工具箱 - toolsView?.showAdUpgradeStatus(upgradeMode,downloadStatus, currentProgress, totalProgress, downloadVersion, upgradeStatus) + toolsView?.showAdUpgradeStatus(upgradeMode, downloadStatus, currentProgress, totalProgress, downloadVersion, upgradeStatus) } } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/carcorder/CarcorderPreviewView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/carcorder/CarcorderPreviewView.kt index 221ac30d80..b67917db9c 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/carcorder/CarcorderPreviewView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/carcorder/CarcorderPreviewView.kt @@ -74,7 +74,7 @@ class CarcorderPreviewView private constructor( .setTag("CarcorderPreviewView") .setLayout(carcorderPreviewVie) .setSidePattern(SidePattern.RIGHT) - .setGravity(Gravity.RIGHT, offsetY = 200) + .setGravity(Gravity.RIGHT, offsetY = 250) .setImmersionStatusBar(true) .setAnimator(object : DefaultAnimator() { override fun enterAnim(