From fa485afe868c11bf673afce980872dc559203dc8 Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Tue, 12 Dec 2023 15:26:28 +0800 Subject: [PATCH 01/12] =?UTF-8?q?[6.2.4]=E8=B0=83=E6=95=B4=E5=BD=95?= =?UTF-8?q?=E5=8C=85=E6=88=AA=E5=9B=BE=E6=96=87=E5=AD=97=E9=A2=9C=E8=89=B2?= =?UTF-8?q?=E4=B8=BA=E7=99=BD=E8=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../badcase/util/RecordBitmapUtils.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/util/RecordBitmapUtils.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/util/RecordBitmapUtils.kt index 9020546532..b65884d61d 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/util/RecordBitmapUtils.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/util/RecordBitmapUtils.kt @@ -83,7 +83,7 @@ object RecordBitmapUtils { val mutableBitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true) val canvas = Canvas(mutableBitmap) val paint = Paint() - paint.color = Color.RED + paint.color = Color.WHITE paint.textSize = 50f paint.isAntiAlias = true canvas.drawText(time, 100f, 100f, paint) From 2b2157a7858b82f4046bbe4253755498ec58dc31 Mon Sep 17 00:00:00 2001 From: renwj Date: Mon, 11 Dec 2023 17:54:33 +0800 Subject: [PATCH 02/12] =?UTF-8?q?[6.2.4][View=E7=82=B9=E5=87=BB=E6=80=81]?= =?UTF-8?q?=20=E6=B7=BB=E5=8A=A0View=E7=9A=84=E7=82=B9=E5=87=BB=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lancet/ViewPressedStateLancet.java | 191 ++++++++++++++++++ .../mogo-core-res/src/main/res/values/ids.xml | 4 + .../src/main/res/values/styles.xml | 4 + gradle/bytex/bytex_lancetx.gradle | 3 + 4 files changed, 202 insertions(+) create mode 100644 app/src/main/java/com/mogo/launcher/lancet/ViewPressedStateLancet.java create mode 100644 core/mogo-core-res/src/main/res/values/ids.xml diff --git a/app/src/main/java/com/mogo/launcher/lancet/ViewPressedStateLancet.java b/app/src/main/java/com/mogo/launcher/lancet/ViewPressedStateLancet.java new file mode 100644 index 0000000000..3ebd92187f --- /dev/null +++ b/app/src/main/java/com/mogo/launcher/lancet/ViewPressedStateLancet.java @@ -0,0 +1,191 @@ +package com.mogo.launcher.lancet; + +import android.content.Context; +import android.content.res.ColorStateList; +import android.content.res.TypedArray; +import android.graphics.Color; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.StateListDrawable; +import android.os.Build; +import android.util.AttributeSet; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; +import androidx.core.graphics.drawable.DrawableCompat; +import androidx.core.view.ViewCompat; +import com.knightboost.lancet.api.Origin; +import com.knightboost.lancet.api.Scope; +import com.knightboost.lancet.api.annotations.Group; +import com.knightboost.lancet.api.annotations.ImplementedInterface; +import com.knightboost.lancet.api.annotations.Insert; +import com.knightboost.lancet.api.annotations.ReplaceInvoke; +import com.knightboost.lancet.api.annotations.TargetClass; +import com.knightboost.lancet.api.annotations.TargetMethod; +import com.knightboost.lancet.api.annotations.Weaver; +import com.mogo.launcher.R; + +@Weaver +@Group("view_pressed_state") +public class ViewPressedStateLancet { + + @TargetClass(value = "android.view.View", scope = Scope.ALL) + @TargetMethod(methodName = "setOnClickListener") + @ReplaceInvoke + public static void setOnClickListener(View view, View.OnClickListener listener) { + Object tag = view.getTag(R.id.click_pressed_attr_id); + checkSetBgIfNeed(view, tag == null ? null : (AttributeSet) tag); + view.setOnClickListener(listener); + } + + @TargetClass(value = "android.view.View", scope = Scope.ALL) + @TargetMethod(methodName = "setOnLongClickListener") + @ReplaceInvoke + public static void setOnLongClickListener(View view, View.OnLongClickListener listener) { + Object tag = view.getTag(R.id.click_pressed_attr_id); + checkSetBgIfNeed(view, tag == null ? null : (AttributeSet) tag); + view.setOnLongClickListener(listener); + } + + @ImplementedInterface(value = "android.view.LayoutInflater$Factory", scope = Scope.LEAF) + @Insert(mayCreateSuper = true) + @TargetMethod(methodName = "onCreateView") + public View onCreateView(String name, Context context, AttributeSet attrs) { + View view = (View) Origin.call(); + checkSetBgIfNeed(view, attrs); + return view; + } + + @ImplementedInterface(value = "android.view.LayoutInflater$Factory2", scope = Scope.LEAF) + @Insert(mayCreateSuper = true) + @TargetMethod(methodName = "onCreateView") + public View onCreateView(View parent, String name, Context context, AttributeSet attrs) { + View view = (View) Origin.call(); + checkSetBgIfNeed(view, attrs); + return view; + } + + private static void checkSetBgIfNeed(View view, AttributeSet attr) { + try { + TypedArray t = null; + float alpha; + boolean enabled; + try { + if (view == null) { + return; + } + Context context = view.getContext(); + if (context == null) { + return; + } + if (attr == null) { + return; + } + t = context.obtainStyledAttributes(attr, R.styleable.ClickPressedStyle); + enabled = t.getBoolean(R.styleable.ClickPressedStyle_pressed_enabled, true); + if (!enabled) { + return; + } + alpha = t.getFloat(R.styleable.ClickPressedStyle_pressed_alpha, 0.6f); + if (alpha > 1.0f) { + throw new AssertionError("view custom attr: alpha > 1.0f, must be in [0.0, 1.0]"); + } + view.setTag(R.id.click_pressed_attr_id, attr); + } finally { + if (t != null) { + t.recycle(); + } + } + if (view instanceof ImageView) { + ImageView image = (ImageView) view; + Drawable replaced = checkAndReplaceDrawable(image.getBackground(), alpha); + if (replaced != null) { + ViewCompat.setBackground(image, replaced); + return; + } + replaced = checkAndReplaceDrawable(image.getDrawable(), alpha); + if (replaced != null) { + image.setImageDrawable(replaced); + return; + } + } + if (view instanceof TextView) { + TextView text = (TextView) view; + Drawable replaced = checkAndReplaceDrawable(text.getBackground(), alpha); + if (replaced != null) { + ViewCompat.setBackground(text, replaced); + return; + } + ColorStateList textColor = text.getTextColors(); + if (textColor != null) { + int pressed = textColor.getColorForState(new int[]{ android.R.attr.state_pressed }, Integer.MIN_VALUE); + if (pressed != Integer.MIN_VALUE) { + return; + } + int defaultColor = textColor.getDefaultColor(); + int pressedColor = Color.argb((int)(Color.alpha(defaultColor) * alpha), Color.red(defaultColor), Color.green(defaultColor), Color.blue(defaultColor)); + ColorStateList newColor = new ColorStateList(new int[][] { new int[] { -android.R.attr.state_pressed }, new int[] { android.R.attr.state_pressed }}, new int[] { defaultColor, pressedColor }); + text.setTextColor(newColor); + } + } + } catch (Throwable t) { + t.printStackTrace(); + } + } + + private static Drawable checkAndReplaceDrawable(Drawable old, float alpha) { + if (old == null) { + return null; + } + if (old instanceof StateListDrawable) { + StateListDrawable drawable = (StateListDrawable) old; + int[] states = drawable.getState(); + boolean hasPressed = false; + int index = 0; + int targetIndex = -1; + for (int state : states) { + if (!hasPressed && state == android.R.attr.state_pressed) { + hasPressed = true; + } + if (targetIndex == -1 && state != -android.R.attr.state_enabled) { + targetIndex = index; + } + if (hasPressed && targetIndex != -1) { + break; + } + index ++; + } + if (hasPressed) { + return null; + } + if (targetIndex != -1) { + Drawable origin= null; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + origin = drawable.getStateDrawable(targetIndex); + } else { + origin = drawable.getCurrent(); + } + if (origin != null) { + Drawable.ConstantState constantState = origin.getConstantState(); + if (constantState != null) { + Drawable pressed = DrawableCompat.wrap(constantState.newDrawable().mutate()); + pressed.setAlpha((int)(255 * alpha)); + drawable.addState(new int[] {android.R.attr.state_pressed}, pressed); + return drawable; + } + } + return null; + } + return null; + } + Drawable.ConstantState constantState = old.getConstantState(); + if (constantState != null) { + StateListDrawable result = new StateListDrawable(); + result.addState(new int[] { -android.R.attr.state_pressed }, old); + Drawable pressed = DrawableCompat.wrap(constantState.newDrawable().mutate()); + pressed.setAlpha((int)(255 * alpha)); + result.addState(new int[] { android.R.attr.state_pressed }, pressed); + return result; + } + return null; + } +} diff --git a/core/mogo-core-res/src/main/res/values/ids.xml b/core/mogo-core-res/src/main/res/values/ids.xml new file mode 100644 index 0000000000..fc995c989e --- /dev/null +++ b/core/mogo-core-res/src/main/res/values/ids.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/core/mogo-core-res/src/main/res/values/styles.xml b/core/mogo-core-res/src/main/res/values/styles.xml index d983a865a0..e6496d2029 100644 --- a/core/mogo-core-res/src/main/res/values/styles.xml +++ b/core/mogo-core-res/src/main/res/values/styles.xml @@ -13,4 +13,8 @@ + + + + \ No newline at end of file diff --git a/gradle/bytex/bytex_lancetx.gradle b/gradle/bytex/bytex_lancetx.gradle index d4cbbd960e..9f9ed05765 100644 --- a/gradle/bytex/bytex_lancetx.gradle +++ b/gradle/bytex/bytex_lancetx.gradle @@ -30,6 +30,9 @@ LancetX { main_block_check { enable rootProject.isJunkDetectEnable() } + view_pressed_state { + enable true + } } } From be6a75eb3fd07ef9d36cb60424507c98bde4f060 Mon Sep 17 00:00:00 2001 From: renwj Date: Mon, 11 Dec 2023 17:59:48 +0800 Subject: [PATCH 03/12] =?UTF-8?q?[6.2.4][Apm]=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E9=87=8D=E5=90=AF=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mogo_core_function_devatools/apm/ApmEnvProviderImpl.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/apm/ApmEnvProviderImpl.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/apm/ApmEnvProviderImpl.kt index d391927509..1eb915f91b 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/apm/ApmEnvProviderImpl.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/apm/ApmEnvProviderImpl.kt @@ -69,7 +69,9 @@ class ApmEnvProviderImpl: IApmEnvProvider, CoroutineScope { var dockerVersionChanged = false val version = ApmEnvConfig.getDockerVersion() if (!TextUtils.isEmpty(version) && !TextUtils.isEmpty(dockerVersion) && version != dockerVersion) { - dockerVersionChanged = version?.endsWith("release", true) == true || dockerVersion.endsWith("release", true) + val f1 = version?.endsWith("release", true) == true + val f2 = dockerVersion.endsWith("release", true) + dockerVersionChanged = if (f1 && f2) false else f1 || f2 if (dockerVersionChanged) { ApmEnvConfig.setDockerVersion(dockerVersion) } From 3e0dfc8e78013cc6e5ae9962dcc2a9ea56026bd5 Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Tue, 12 Dec 2023 16:15:52 +0800 Subject: [PATCH 04/12] =?UTF-8?q?[6.2.4]=E4=BF=AE=E5=A4=8D=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E9=87=87=E9=9B=86=E5=BD=95bag=E6=97=B6=E4=B8=8D?= =?UTF-8?q?=E9=80=89=E6=8B=A9=E5=8E=9F=E5=9B=A0=EF=BC=8C=E5=9C=A8=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E5=88=97=E8=A1=A8=E4=B8=AD=E5=86=8D=E6=AC=A1=E9=80=89?= =?UTF-8?q?=E6=8B=A9=E5=8E=9F=E5=9B=A0=E4=B8=8A=E6=8A=A5=E4=BC=9A=E4=BA=A7?= =?UTF-8?q?=E7=94=9F=E6=96=B0=E7=9A=84=E5=BD=95=E5=8C=85=E8=80=8C=E9=9D=9E?= =?UTF-8?q?=E5=9C=A8=E5=8E=9F=E5=BD=95=E5=8C=85=E4=B8=8A=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../badcase/biz/AIDataCollectWindow.kt | 31 ++++++++++++++----- .../badcase/biz/BadCaseManagerView.kt | 2 +- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/AIDataCollectWindow.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/AIDataCollectWindow.kt index 5a653f02b9..361d7639bb 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/AIDataCollectWindow.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/AIDataCollectWindow.kt @@ -13,6 +13,7 @@ import com.mogo.cloud.passport.MoGoAiCloudClientConfig import com.mogo.eagle.core.data.app.AppConfigInfo import com.mogo.eagle.core.data.deva.badcase.AiDataEntity import com.mogo.eagle.core.data.deva.badcase.BagDescriptionEntity +import com.mogo.eagle.core.data.deva.badcase.BagInfoEntity import com.mogo.eagle.core.data.deva.badcase.BagManagerEntity import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotRecordListener import com.mogo.eagle.core.function.api.devatools.badcase.BadCaseNetListener @@ -114,13 +115,6 @@ class AIDataCollectWindow constructor(activity: Activity) : View.OnTouchListener "时间:${millis2String(System.currentTimeMillis(), TimeUtils.getHourMinSecondFormat())}" //采集结果回调监听 CallerAutopilotRecordListenerManager.addListener(this.hashCode().toString(), this) - //开始录制AI数据采集Bag包 - CallerAutoPilotControlManager.recordPackage( - 99, - Random(SystemClock.elapsedRealtime()).nextInt(), - 20, - 12 - ) val linearLayoutManager = LinearLayoutManager(mActivity) linearLayoutManager.orientation = LinearLayoutManager.VERTICAL rvCollectList?.layoutManager = linearLayoutManager @@ -262,6 +256,29 @@ class AIDataCollectWindow constructor(activity: Activity) : View.OnTouchListener mWindowParams!!.y = metrics.heightPixels - BarUtils.getStatusBarHeight() - 950 mWindowManager!!.addView(mFloatLayout, mWindowParams) } + //开始录制AI数据采集Bag包 + CallerAutoPilotControlManager.recordPackage( + 99, + Random(SystemClock.elapsedRealtime()).nextInt(), + 20, + 12 + ) + } + + fun showReportBIWindow(bagInfoEntity: BagInfoEntity){ + if (mFloatLayout.parent == null) { + val metrics = DisplayMetrics() + // 默认固定位置,靠屏幕右边缘的中间 + mWindowManager!!.defaultDisplay.getMetrics(metrics) + mWindowParams!!.x = metrics.widthPixels + mWindowParams!!.y = metrics.heightPixels - BarUtils.getStatusBarHeight() - 950 + mWindowManager!!.addView(mFloatLayout, mWindowParams) + } + //已经录包无需再次启动录包,只要将录包信息同步到弹窗 + bagInfoEntity.let { + recordKey = it.key + recordFileName = it.bagPath + } } fun hideFloatWindow() { diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt index 14cd988e10..91a9798b34 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt @@ -204,7 +204,7 @@ class BadCaseManagerView @JvmOverloads constructor( aiDataCollectWindow.hideFloatWindow() } }) - aiDataCollectWindow.showFloatWindow() + aiDataCollectWindow.showReportBIWindow(bagInfoEntity) } override fun editDescription(key: Long, description: BagDescriptionEntity) { From 44817e500d039b5164d825e2170d8cf8c123932a Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Tue, 12 Dec 2023 17:10:50 +0800 Subject: [PATCH 05/12] =?UTF-8?q?[6.2.4]=E6=95=B0=E6=8D=AE=E9=87=87?= =?UTF-8?q?=E9=9B=86=E9=80=89=E6=8B=A9=E4=B8=A4=E4=B8=AA=E4=BB=A5=E4=B8=8A?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E6=97=B6=EF=BC=8C=E5=9C=A8=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E4=B8=AD=E5=90=8D=E7=A7=B0=E6=98=AF=E6=B2=A1=E6=9C=89=E5=88=86?= =?UTF-8?q?=E5=BC=80=E7=9A=84=EF=BC=8C=E5=BB=BA=E8=AE=AE=E4=BD=BF=E7=94=A8?= =?UTF-8?q?&=E8=BF=9E=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../badcase/biz/AIDataCollectWindow.kt | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/AIDataCollectWindow.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/AIDataCollectWindow.kt index 361d7639bb..72a59048dc 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/AIDataCollectWindow.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/AIDataCollectWindow.kt @@ -42,6 +42,7 @@ import org.json.JSONObject import record_cache.RecordPanelOuterClass import java.lang.StringBuilder import java.util.* +import kotlin.collections.ArrayList /** * @author XuXinChao @@ -66,6 +67,7 @@ class AIDataCollectWindow constructor(activity: Activity) : View.OnTouchListener private lateinit var tvCollectCancel: TextView //取消按钮 private var collectReason: StringBuilder = StringBuilder() + private var collectList = ArrayList() private var aiDataListAdapter: AiDataListAdapter?= null @@ -122,10 +124,13 @@ class AIDataCollectWindow constructor(activity: Activity) : View.OnTouchListener aiDataListAdapter?.setListener(object: AiDataListAdapter.AiDataClickListener{ override fun onClick(reason: String, isChecked: Boolean) { if(isChecked){ - collectReason.append(reason) + if(!collectList.contains(reason)){ + collectList.add(reason) + } }else{ - val index = collectReason.indexOf(reason) - collectReason.delete(index,index+reason.length) + if(collectList.contains(reason)){ + collectList.remove(reason) + } } } }) @@ -137,10 +142,17 @@ class AIDataCollectWindow constructor(activity: Activity) : View.OnTouchListener //上报 tvCollectReport.setOnClickListener { - if(collectReason.isBlank()){ + if(collectList.isEmpty()){ ToastUtils.showShort("请选择最少一个原因") return@setOnClickListener } + collectReason.clear() + for(index in collectList.indices){ + if(index!=0){ + collectReason.append("&") + } + collectReason.append(collectList[index]) + } //上报到工控机 CallerAutoPilotControlManager.recordCause(recordKey.toString(),recordFileName,"", collectReason.toString()) From dd2fe9a9ab74675d2db109fd23d58c1ea6beb24b Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Tue, 12 Dec 2023 17:37:36 +0800 Subject: [PATCH 06/12] =?UTF-8?q?[6.2.4]=E5=BD=95=E5=8C=85=E5=A4=9A?= =?UTF-8?q?=E4=B8=AA=E5=8E=9F=E5=9B=A0=E7=94=A8&=E5=88=86=E5=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../badcase/biz/InitiativeBadCaseWindow.kt | 20 +++++++++++++++---- .../badcase/biz/PassiveBadCaseWindow.kt | 19 ++++++++++++++---- 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/InitiativeBadCaseWindow.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/InitiativeBadCaseWindow.kt index b9d63b1296..7a5dfc75e0 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/InitiativeBadCaseWindow.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/InitiativeBadCaseWindow.kt @@ -72,6 +72,7 @@ import org.json.JSONObject import record_cache.RecordPanelOuterClass import java.io.File import java.util.* +import kotlin.collections.ArrayList /** @@ -111,6 +112,7 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList private var audioFileName:String?=null //录音文件名称 private var uploadReason: StringBuilder = StringBuilder() //上报原因,标签 + private var uploadList = ArrayList() //上报原因列表 private var reasonDetail: String = "" //语音转写 private var uploadReasonTotal: String = "" @Volatile @@ -180,10 +182,13 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList badReasonListAdapter?.setListener(object: BadReasonListAdapter.ReasonClickListener{ override fun onClick(reason: String, isChecked: Boolean) { if(isChecked){ - uploadReason.append(reason) + if(!uploadList.contains(reason)){ + uploadList.add(reason) + } }else{ - val index = uploadReason.indexOf(reason) - uploadReason.delete(index,index+reason.length) + if(uploadList.contains(reason)){ + uploadList.remove(reason) + } } } }) @@ -214,10 +219,17 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList //上报 tvInitiativeReport.setOnClickListener { - if(uploadReason.isBlank()){ + if(uploadList.isEmpty()){ ToastUtils.showShort("请选择最少一个原因") return@setOnClickListener } + uploadReason.clear() + for(index in uploadList.indices){ + if(index!=0){ + uploadReason.append("&") + } + uploadReason.append(uploadList[index]) + } tvInitiativeReport.text = "上报中..." if(audioStatus){ audioStatus = false 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 b13cb793d2..442d2b6b29 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 @@ -89,6 +89,7 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene private var bagManagerEntity: BagManagerEntity = BagManagerEntity() private var uploadReason: StringBuilder = StringBuilder() //上报原因,标签 + private var uploadList = ArrayList() //上报原因列表 private var recordKey: String?=null //录制bag包key private var recordFileName: String?=null //录制文件包名 private var receiveTime: String ?= null //接收时间 @@ -171,10 +172,13 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene override fun onClick(reason: String, isChecked: Boolean) { hasOperated = true if(isChecked){ - uploadReason.append(reason) + if(!uploadList.contains(reason)){ + uploadList.add(reason) + } }else{ - val index = uploadReason.indexOf(reason) - uploadReason.delete(index,index+reason.length) + if(uploadList.contains(reason)){ + uploadList.remove(reason) + } } } }) @@ -203,10 +207,17 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene tvPassiveReport.setOnClickListener { hasOperated = true - if(uploadReason.isEmpty()){ + if(uploadList.isEmpty()){ TipToast.shortTip("请选择至少一个Case") return@setOnClickListener } + uploadReason.clear() + for(index in uploadList.indices){ + if(index!=0){ + uploadReason.append("&") + } + uploadReason.append(uploadList[index]) + } tvPassiveReport.text = "上报中..." if(audioStatus){ audioStatus = !audioStatus From f899a08ee09c7caf7e2687268483352cb69fda88 Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Tue, 12 Dec 2023 17:45:30 +0800 Subject: [PATCH 07/12] =?UTF-8?q?[6.2.4]=E8=B7=AF=E7=BA=BF=E8=B5=B7?= =?UTF-8?q?=E5=A7=8B=E7=82=B9=E4=B8=BA=E7=A9=BA=E6=97=B6=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=EF=BC=9A=E8=B7=AF=E7=BA=BF=E8=B5=B7=E5=A7=8B=E7=82=B9=E6=97=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../badcase/biz/InitiativeBadCaseWindow.kt | 6 +++++- .../badcase/biz/PassiveBadCaseWindow.kt | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/InitiativeBadCaseWindow.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/InitiativeBadCaseWindow.kt index 7a5dfc75e0..7e1db01243 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/InitiativeBadCaseWindow.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/InitiativeBadCaseWindow.kt @@ -677,7 +677,11 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList else->"自驾状态:未知" } val speed = "当前车速:${BadCaseConfig.currentSpeed}" - val site = "起点:${CallerAutoPilotStatusListenerManager.getLineStartName()};终点:${CallerAutoPilotStatusListenerManager.getLineEndName()}" + val site = if(CallerAutoPilotStatusListenerManager.getLineStartName().isNullOrEmpty() || CallerAutoPilotStatusListenerManager.getLineEndName().isNullOrEmpty()){ + "路线起始点:无" + }else{ + "路线起点:${CallerAutoPilotStatusListenerManager.getLineStartName()};终点:${CallerAutoPilotStatusListenerManager.getLineEndName()}" + } val outBitmap = RecordBitmapUtils.drawTextOnBitmap(bitmap,time,lineId,state,speed,site, BadCaseConfig.gpsStatus,BadCaseConfig.tracingStatus,BadCaseConfig.socketStatus 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 442d2b6b29..7c9a477c5b 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 @@ -643,7 +643,11 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene else->"自驾状态:未知" } val speed = "当前车速:${BadCaseConfig.currentSpeed}" - val site = "起点:${CallerAutoPilotStatusListenerManager.getLineStartName()};终点:${CallerAutoPilotStatusListenerManager.getLineEndName()}" + val site = if(CallerAutoPilotStatusListenerManager.getLineStartName().isNullOrEmpty() || CallerAutoPilotStatusListenerManager.getLineEndName().isNullOrEmpty()){ + "路线起始点:无" + }else{ + "路线起点:${CallerAutoPilotStatusListenerManager.getLineStartName()};终点:${CallerAutoPilotStatusListenerManager.getLineEndName()}" + } val outBitmap = RecordBitmapUtils.drawTextOnBitmap(bitmap,time,lineId,state,speed,site, BadCaseConfig.gpsStatus,BadCaseConfig.tracingStatus,BadCaseConfig.socketStatus From 2b01260b5c57f681e0654ddcedaa72f15ae52faf Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Tue, 12 Dec 2023 18:12:19 +0800 Subject: [PATCH 08/12] =?UTF-8?q?[6.2.4]=E5=BD=95=E5=8C=85=E7=AE=A1?= =?UTF-8?q?=E7=90=86=EF=BC=8C=E5=B7=B2=E7=BB=8F=E4=B8=8A=E6=8A=A5=E7=9A=84?= =?UTF-8?q?Bag=E4=B8=8D=E5=86=8D=E6=94=AF=E6=8C=81=E7=BC=96=E8=BE=91?= =?UTF-8?q?=EF=BC=8C=E7=BC=96=E8=BE=91=E6=8C=89=E9=92=AE=E7=BD=AE=E7=81=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../biz/adapter/BagManagerListAdapter.kt | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/adapter/BagManagerListAdapter.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/adapter/BagManagerListAdapter.kt index 2f20730b5c..f8e597809a 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/adapter/BagManagerListAdapter.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/adapter/BagManagerListAdapter.kt @@ -1,5 +1,6 @@ package com.zhjt.mogo_core_function_devatools.badcase.biz.adapter +import android.os.Build import android.text.Editable import android.text.TextWatcher import android.view.LayoutInflater @@ -125,6 +126,12 @@ class BagManagerListAdapter: RecyclerView.Adapter() { //已上报的Bag不支持再查看,图标置为灰色,并且不可点击 holder.ivMapScreen.alpha = 0.5f holder.ivMapScreen.isClickable = false + //已上报的Bag不能再进行编辑,编辑图标置灰,并且不可点击 + holder.ivEditReason.alpha = 0.5f + holder.ivEditReason.isClickable = false + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + holder.etBagNameEdit.focusable = View.NOT_FOCUSABLE + } }else{ //未上报 holder.tvBagReportStatus.text = "上报" @@ -147,6 +154,15 @@ class BagManagerListAdapter: RecyclerView.Adapter() { } } } + + //编辑文字按钮 + holder.ivEditReason.setOnClickListener { + holder.etBagNameEdit.requestFocus() + holder.etBagNameEdit.performClick() + //调起软键盘 + bagClickListener?.startEdit(holder.etBagNameEdit) + } + } } if(des.description.isEmpty()){ @@ -173,13 +189,7 @@ class BagManagerListAdapter: RecyclerView.Adapter() { holder.tvBagResource.setBackgroundResource(R.drawable.bag_auto_button_bg) } - //编辑文字按钮 - holder.ivEditReason.setOnClickListener { - holder.etBagNameEdit.requestFocus() - holder.etBagNameEdit.performClick() - //调起软键盘 - bagClickListener?.startEdit(holder.etBagNameEdit) - } + if(bagInfoEntity.description?.hasAudio == true){ holder.ivBagAudio.visibility = View.VISIBLE From b7972e5b06a92c6321cbcc74abc7a1919077498e Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Tue, 12 Dec 2023 18:48:45 +0800 Subject: [PATCH 09/12] =?UTF-8?q?[6.2.4]=E4=BF=AE=E5=A4=8DAI=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E9=87=87=E9=9B=86=E6=95=B0=E6=8D=AE=E5=B1=95=E7=A4=BA?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../badcase/biz/AIDataCollectWindow.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/AIDataCollectWindow.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/AIDataCollectWindow.kt index 72a59048dc..91ba40f715 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/AIDataCollectWindow.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/AIDataCollectWindow.kt @@ -136,7 +136,7 @@ class AIDataCollectWindow constructor(activity: Activity) : View.OnTouchListener }) rvCollectList?.adapter = aiDataListAdapter //注册网络接口获取数据监听 - CallerDevaToolsNetManager.addListener(TAG,this) + CallerDevaToolsNetManager.addListener(this.hashCode().toString(),this) //获取数据 BadCaseNetManager.badCaseNetManager.getAiData() @@ -297,7 +297,7 @@ class AIDataCollectWindow constructor(activity: Activity) : View.OnTouchListener //注销采集结果回调监听 CallerAutopilotRecordListenerManager.removeListener(this.hashCode().toString()) //注销网络接口监听 - CallerDevaToolsNetManager.removeListener(this) + CallerDevaToolsNetManager.removeListener(this.hashCode().toString()) // 移除 ADAS车辆状态&定位 监听 CallerChassisLocationWGS84ListenerManager.removeListener(this.hashCode().toString()) if (mFloatLayout.parent != null) mWindowManager!!.removeView(mFloatLayout) From e3207d62a34dae7c9a6c3a83ec54d6434f08559d Mon Sep 17 00:00:00 2001 From: renwj Date: Tue, 12 Dec 2023 19:13:24 +0800 Subject: [PATCH 10/12] =?UTF-8?q?[6.2.4][View=E7=82=B9=E5=87=BB=E6=80=81]?= =?UTF-8?q?=20=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lancet/ViewPressedStateLancet.java | 42 +++++++++++++++++-- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/mogo/launcher/lancet/ViewPressedStateLancet.java b/app/src/main/java/com/mogo/launcher/lancet/ViewPressedStateLancet.java index 3ebd92187f..4fa3bdd617 100644 --- a/app/src/main/java/com/mogo/launcher/lancet/ViewPressedStateLancet.java +++ b/app/src/main/java/com/mogo/launcher/lancet/ViewPressedStateLancet.java @@ -32,6 +32,9 @@ public class ViewPressedStateLancet { @TargetMethod(methodName = "setOnClickListener") @ReplaceInvoke public static void setOnClickListener(View view, View.OnClickListener listener) { + if (view == null) { + return; + } Object tag = view.getTag(R.id.click_pressed_attr_id); checkSetBgIfNeed(view, tag == null ? null : (AttributeSet) tag); view.setOnClickListener(listener); @@ -41,6 +44,9 @@ public class ViewPressedStateLancet { @TargetMethod(methodName = "setOnLongClickListener") @ReplaceInvoke public static void setOnLongClickListener(View view, View.OnLongClickListener listener) { + if (view == null) { + return; + } Object tag = view.getTag(R.id.click_pressed_attr_id); checkSetBgIfNeed(view, tag == null ? null : (AttributeSet) tag); view.setOnLongClickListener(listener); @@ -86,8 +92,8 @@ public class ViewPressedStateLancet { return; } alpha = t.getFloat(R.styleable.ClickPressedStyle_pressed_alpha, 0.6f); - if (alpha > 1.0f) { - throw new AssertionError("view custom attr: alpha > 1.0f, must be in [0.0, 1.0]"); + if (alpha < 0.0f || alpha > 1.0f) { + throw new AssertionError("view custom attr \\'alpha\\' must be in [0.0, 1.0]"); } view.setTag(R.id.click_pressed_attr_id, attr); } finally { @@ -107,6 +113,7 @@ public class ViewPressedStateLancet { image.setImageDrawable(replaced); return; } + return; } if (view instanceof TextView) { TextView text = (TextView) view; @@ -121,11 +128,38 @@ public class ViewPressedStateLancet { if (pressed != Integer.MIN_VALUE) { return; } - int defaultColor = textColor.getDefaultColor(); + int color = textColor.getColorForState(new int[] { android.R.attr.state_enabled }, Integer.MIN_VALUE); + int defaultColor = color; + if (color == Integer.MIN_VALUE) { + defaultColor = textColor.getDefaultColor(); + } int pressedColor = Color.argb((int)(Color.alpha(defaultColor) * alpha), Color.red(defaultColor), Color.green(defaultColor), Color.blue(defaultColor)); - ColorStateList newColor = new ColorStateList(new int[][] { new int[] { -android.R.attr.state_pressed }, new int[] { android.R.attr.state_pressed }}, new int[] { defaultColor, pressedColor }); + int disableColor = textColor.getColorForState(new int[] { -android.R.attr.state_enabled }, Integer.MIN_VALUE); + int size = 2; + if (disableColor != Integer.MIN_VALUE) { + size += 1; + } + int[][] states = new int[size][1]; + int[] colors = new int[size]; + states[0] = new int[] { android.R.attr.state_pressed }; + colors[0] = pressedColor; + if (size > 2) { + states[1] = new int[] { -android.R.attr.state_enabled }; + colors[1] = disableColor; + states[2] = new int[] { android.R.attr.state_enabled }; + colors[2] = defaultColor; + } else { + states[1] = new int[] { -android.R.attr.state_pressed }; + colors[1] = defaultColor; + } + ColorStateList newColor = new ColorStateList(states, colors); text.setTextColor(newColor); } + return; + } + Drawable replaced = checkAndReplaceDrawable(view.getBackground(), alpha); + if (replaced != null) { + ViewCompat.setBackground(view, replaced); } } catch (Throwable t) { t.printStackTrace(); From e931d50159d16b93f867b86975c36ccf42db988d Mon Sep 17 00:00:00 2001 From: renwj Date: Wed, 13 Dec 2023 12:10:08 +0800 Subject: [PATCH 11/12] =?UTF-8?q?[6.2.4][=E8=98=91=E6=96=B9]=20=E5=8D=87?= =?UTF-8?q?=E7=BA=A7sdk=E7=89=88=E6=9C=AC=EF=BC=8C=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E7=94=B5=E9=87=8F=E5=BF=83=E8=B7=B3=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.gradle b/config.gradle index 79f837af88..bb0e778323 100644 --- a/config.gradle +++ b/config.gradle @@ -221,7 +221,7 @@ ext { weak_network : "com.mogo.weak:network:1.0.1", btrace : "com.bytedance.btrace:rhea-core:2.0.0", - mofang_runtime : "com.mogo.eagle.core.mofang:runtime:2.0.7", + mofang_runtime : "com.mogo.eagle.core.mofang:runtime:2.0.10", log_runtime : "com.mogo.eagle.core.log.record:runtime:1.0.30", // 安全证书 From d611c93dbcb659f4c7aed74a7cb27da3ac78e5cd Mon Sep 17 00:00:00 2001 From: renwj Date: Wed, 13 Dec 2023 15:56:09 +0800 Subject: [PATCH 12/12] =?UTF-8?q?[6.2.4][View=E7=82=B9=E5=87=BB=E6=80=81]?= =?UTF-8?q?=20=E6=9A=82=E6=97=B6=E5=85=B3=E6=8E=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradle/bytex/bytex_lancetx.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/bytex/bytex_lancetx.gradle b/gradle/bytex/bytex_lancetx.gradle index 9f9ed05765..6120e724c7 100644 --- a/gradle/bytex/bytex_lancetx.gradle +++ b/gradle/bytex/bytex_lancetx.gradle @@ -31,7 +31,7 @@ LancetX { enable rootProject.isJunkDetectEnable() } view_pressed_state { - enable true + enable false } } }