[6.7.0][运营面板] 代码部分提交

This commit is contained in:
renwj
2024-09-20 19:34:03 +08:00
parent b7e58d6c4e
commit 4a3fb0bb7e
34 changed files with 768 additions and 11 deletions

View File

@@ -8,6 +8,7 @@ import android.os.Handler;
import android.os.Looper;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewStub;
import android.view.animation.LinearInterpolator;
import android.widget.FrameLayout;
import android.widget.ImageView;

View File

@@ -431,4 +431,13 @@
android:elevation="100dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!-- 运营面板 -->
<ViewStub
android:id="@+id/vsOperateView"
android:layout_width="@dimen/dp_1000"
android:layout_height="match_parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -238,7 +238,11 @@ ext {
handler_proxy_runtime : "com.mogo.eagle.core.handler.proxy:runtime:10.0.10",
//======================== jts-core ==============
jts_core : "org.locationtech.jts:jts-core:1.19.0"
jts_core : "org.locationtech.jts:jts-core:1.19.0",
//========================= androidx-preference ====
preference : "androidx.preference:preference:1.2.1",
preference_ktx : "androidx.preference:preference-ktx:1.2.1"
]
android = [
fLauncherApplicationId : "com.mogo.launcher.f",

View File

@@ -77,6 +77,8 @@ dependencies {
implementation rootProject.ext.dependencies.koomjava
implementation rootProject.ext.dependencies.koomnative
implementation rootProject.ext.dependencies.koomxhook
implementation rootProject.ext.dependencies.preference
implementation rootProject.ext.dependencies.preference_ktx
implementation rootProject.ext.dependencies.thread_opt
api project(':test:crashreport-apmbyte')

View File

@@ -2,8 +2,11 @@ package com.mogo.eagle.core.function.hmi.ui
import android.content.Context
import android.text.TextUtils
import android.transition.Slide
import android.util.Log
import android.view.Gravity
import android.view.ViewGroup
import android.view.WindowManager
import androidx.lifecycle.ProcessLifecycleOwner
import androidx.lifecycle.lifecycleScope
import com.alibaba.android.arouter.facade.annotation.Route
@@ -38,6 +41,8 @@ import com.mogo.eagle.core.function.hmi.ui.notice.DispatchDialogManager
import com.mogo.eagle.core.function.hmi.ui.notice.NoticeCheckDialog
import com.mogo.eagle.core.function.hmi.ui.notice.traffic.NoticeTrafficDialog
import com.mogo.eagle.core.function.hmi.ui.setting.CameraLiveView.Companion.cameraLiveView
import com.mogo.eagle.core.function.hmi.bone.status.fsm.FSMStatusDetailWindowManager
import com.mogo.eagle.core.function.hmi.ui.operate.OperatePanelLayout
import com.mogo.eagle.core.function.hmi.ui.setting.StatusView
import com.mogo.eagle.core.function.hmi.ui.setting.ToolsView.Companion.toolsView
import com.mogo.eagle.core.function.hmi.ui.tools.AdUpgradeDialog
@@ -59,6 +64,8 @@ import com.zhjt.service_biz.BizConfig
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import me.jessyan.autosize.utils.AutoSizeUtils
import java.lang.ref.WeakReference
import java.util.concurrent.atomic.AtomicBoolean
import java.util.concurrent.atomic.AtomicReference
@@ -86,6 +93,8 @@ class MoGoHmiProvider : IMoGoHmiProvider {
private val xiaozhi by lazy { XiaoZhiStateManager() }
private val operatePanel by lazy { AtomicReference<WeakReference<MoGoPopWindow>>(null) }
override fun init(context: Context?) {
this.context = context
}
@@ -436,4 +445,34 @@ class MoGoHmiProvider : IMoGoHmiProvider {
override fun registerToolKitDefaultItemClickListener(tag: String, listener: IToolKitItemClickListener) {
ToolKitDataManager.addListener(TAG, listener)
}
override fun toggleOperatePanel(show: Boolean) {
val activity = AppStateManager.currentActivity()
if (activity == null) {
Log.d(TAG, "toggleOperatePanel --- activity is null, show: $show")
return
}
if (show) {
if (operatePanel.get()?.get()?.isShowing() == true) {
return
}
MoGoPopWindow.Builder()
.attachToActivity(activity)
.gravityInActivity(Gravity.START or Gravity.TOP)
.contentView(OperatePanelLayout(activity))
.width(AutoSizeUtils.dp2px(activity, 1000.0f))
.height(WindowManager.LayoutParams.MATCH_PARENT)
.transition(Slide(Gravity.START), Slide(Gravity.START))
.onDismissed {
operatePanel.set(null)
}
.build()
.also {
operatePanel.set(WeakReference(it))
}
.show()
} else {
operatePanel.get()?.get()?.hide()
}
}
}

View File

@@ -0,0 +1,103 @@
package com.mogo.eagle.core.function.hmi.ui.operate
import android.content.Context
import android.os.Bundle
import android.util.AttributeSet
import android.util.Log
import android.view.LayoutInflater
import android.widget.LinearLayout
import androidx.core.content.ContextCompat
import androidx.preference.PreferenceFragmentCompat
import androidx.preference.PreferenceHeaderFragmentCompat
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager
import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.utilcode.kotlin.onClick
import kotlinx.android.synthetic.main.layout_operate_panel.view.iv_operate_panel_close
class OperatePanelLayout: LinearLayout {
companion object {
private const val TAG = "OperatePanelLayout"
}
class PreferenceHeaderFragmentCompatImpl: PreferenceHeaderFragmentCompat() {
override fun onCreatePreferenceHeader(): PreferenceFragmentCompat {
Log.d(TAG, "--- onCreatePreferenceHeader ---")
return PreferenceHeader()
}
}
class PreferenceHeader: PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
Log.d(TAG, "PreferenceHeader --- onCreatePreferences ---")
setPreferencesFromResource(R.xml.operate_preference_headers, rootKey)
}
}
class V2XPreferenceFragmentCompat: PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
Log.d(TAG, "V2XPreferenceFragmentCompat --- onCreatePreferences ---")
setPreferencesFromResource(R.xml.operate_preference_details_v2x, rootKey)
}
}
class DemoPreferenceFragmentCompat: PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
Log.d(TAG, "DemoPreferenceFragmentCompat --- onCreatePreferences ---")
setPreferencesFromResource(R.xml.operate_preference_details_demo, rootKey)
}
}
class HdMapPreferenceFragmentCompat: PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
Log.d(TAG, "HdMapPreferenceFragmentCompat --- onCreatePreferences ---")
setPreferencesFromResource(R.xml.operate_preference_details_hdmap, rootKey)
}
}
class BusinessPreferenceFragmentCompat: PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
Log.d(TAG, "BusinessPreferenceFragmentCompat --- onCreatePreferences ---")
setPreferencesFromResource(R.xml.operate_preference_details_business, rootKey)
}
}
class MoFangPreferenceFragmentCompat: PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
Log.d(TAG, "MoFangPreferenceFragmentCompat --- onCreatePreferences ---")
setPreferencesFromResource(R.xml.operate_preference_details_mofang, rootKey)
}
}
class VehiclesPreferenceFragmentCompat: PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
Log.d(TAG, "VehiclesPreferenceFragmentCompat --- onCreatePreferences ---")
setPreferencesFromResource(R.xml.operate_preference_details_vehicles, rootKey)
}
}
constructor(context: Context) : this(context, null)
constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, 0)
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
orientation = VERTICAL
Log.d(TAG, "--- init ----")
LayoutInflater.from(context).inflate(R.layout.layout_operate_panel, this, true)
background = ContextCompat.getDrawable(context, R.drawable.bg_operate_panel)
iv_operate_panel_close?.onClick {
CallerHmiManager.toggleOperatePanel(false)
}
}
override fun onAttachedToWindow() {
super.onAttachedToWindow()
Log.d(TAG, "--- onAttachedToWindow ---")
}
override fun onDetachedFromWindow() {
super.onDetachedFromWindow()
Log.d(TAG, "--- onDetachedFromWindow ---")
}
}

View File

@@ -15,6 +15,7 @@ import com.mogo.eagle.core.function.angle.scenes.Default
import com.mogo.eagle.core.function.angle.scenes.LongSight
import com.mogo.eagle.core.function.api.map.angle.IMoGoVisualAngleChangeProvider
import com.mogo.eagle.core.function.api.map.angle.Scene
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager
import com.mogo.eagle.core.function.call.map.CallerVisualAngleManager
import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.utilcode.kotlin.scope
@@ -84,6 +85,8 @@ class VisualAngleToggleView : FrameLayout, IMoGoVisualAngleChangeProvider.OnMoGo
override fun onAnimationEnd(animation: Animator, isReverse: Boolean) {
super.onAnimationEnd(animation, isReverse)
iv_toggle_block?.isEnabled = true
//TODO renwj
CallerHmiManager.toggleOperatePanel(false)
}
})
animator.interpolator = AccelerateDecelerateInterpolator()
@@ -107,11 +110,12 @@ class VisualAngleToggleView : FrameLayout, IMoGoVisualAngleChangeProvider.OnMoGo
animator.addListener(object : AnimatorListenerAdapter() {
override fun onAnimationStart(animation: Animator, isReverse: Boolean) {
CallerVisualAngleManager.changeScene(LongSight())
}
override fun onAnimationEnd(animation: Animator, isReverse: Boolean) {
iv_toggle_block?.isEnabled = true
//TODO renwj
CallerHmiManager.toggleOperatePanel(true)
}
})
animator.interpolator = AccelerateDecelerateInterpolator()

Binary file not shown.

After

Width:  |  Height:  |  Size: 640 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true">
<shape android:shape="rectangle">
<solid android:color="#1AFFFFFF" />
<corners android:radius="@dimen/dp_30" />
</shape>
</item>
<item android:drawable="@android:color/transparent" />
</selector>

View File

@@ -0,0 +1,58 @@
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:background="@drawable/bg_operate_panel"
tools:layout_height="match_parent"
tools:layout_width="@dimen/dp_1000"
tools:orientation="vertical"
tools:parentTag="android.widget.LinearLayout">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="@dimen/dp_86"
android:layout_marginStart="@dimen/dp_60"
android:layout_marginTop="@dimen/dp_112"
android:orientation="horizontal">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:background="@drawable/icon_operate_panel_rect_blue"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_10"
android:layout_marginTop="@dimen/dp_10"
android:text="运营面板"
android:textColor="#ffffff"
android:textSize="@dimen/dp_42"
tools:ignore="HardcodedText,SpUsage" />
<Space
android:layout_width="0dip"
android:layout_height="@dimen/dp_1"
android:layout_gravity="center_vertical"
android:layout_weight="1" />
<ImageView
android:id="@+id/iv_operate_panel_close"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_8"
android:layout_marginEnd="@dimen/dp_90"
android:background="@drawable/icon_operate_panel_close"
tools:ignore="ContentDescription" />
</LinearLayout>
<androidx.fragment.app.FragmentContainerView
android:id="@+id/operate_panel"
android:name="com.mogo.eagle.core.function.hmi.ui.operate.OperatePanelLayout$PreferenceHeaderFragmentCompatImpl"
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_marginStart="@dimen/dp_60"
android:layout_marginEnd="@dimen/dp_90"
android:layout_weight="1" />
</merge>

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@android:id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="#FF999999"
android:textSize="@dimen/dp_30"
android:paddingTop="@dimen/dp_30"
android:paddingStart="@dimen/dp_30"
tools:text="地图效果"
android:gravity="start" />

View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="@dimen/dp_30"
android:paddingEnd="@dimen/dp_30"
android:orientation="horizontal"
tools:background="#83000000">
<TextView
android:id="@android:id/title"
android:layout_width="0dip"
android:layout_weight="1"
android:layout_height="wrap_content"
android:textSize="@dimen/dp_34"
android:layout_gravity="center_vertical"
android:textColor="#FFFFFF"
tools:text="V2X总开关"/>
<LinearLayout
android:id="@android:id/widget_frame"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:orientation="vertical"/>
</LinearLayout>

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@android:id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="#FFFFFFFF"
android:textSize="@dimen/dp_40"
android:paddingTop="@dimen/dp_25"
android:paddingBottom="@dimen/dp_25"
android:paddingStart="@dimen/dp_30"
tools:text="地图效果"
android:gravity="start" />

View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="@dimen/dp_30"
android:paddingEnd="@dimen/dp_30"
android:orientation="horizontal"
tools:background="#83000000">
<TextView
android:id="@android:id/title"
android:layout_width="0dip"
android:layout_weight="1"
android:layout_height="wrap_content"
android:textSize="@dimen/dp_34"
android:layout_gravity="center_vertical"
android:textColor="#FFFFFF"
tools:text="V2X总开关"/>
<LinearLayout
android:id="@android:id/widget_frame"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:orientation="vertical"/>
</LinearLayout>

View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="@dimen/dp_30"
android:paddingEnd="@dimen/dp_30"
android:orientation="horizontal"
tools:background="#83000000">
<TextView
android:id="@android:id/title"
android:layout_width="0dip"
android:layout_weight="1"
android:layout_height="wrap_content"
android:textSize="@dimen/dp_34"
android:layout_gravity="center_vertical"
android:textColor="#FFFFFF"
tools:text="V2X总开关"/>
<LinearLayout
android:id="@android:id/widget_frame"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:orientation="vertical"/>
</LinearLayout>

View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="@dimen/dp_60"
android:paddingEnd="@dimen/dp_30"
android:orientation="horizontal"
tools:background="#83000000">
<TextView
android:id="@android:id/title"
android:layout_width="0dip"
android:layout_weight="1"
android:layout_height="wrap_content"
android:textSize="@dimen/dp_34"
android:layout_gravity="center_vertical"
android:textColor="#FFFFFF"
tools:text="V2X总开关"/>
<LinearLayout
android:id="@android:id/widget_frame"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:orientation="vertical"/>
</LinearLayout>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.AppCompatCheckBox
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="false"
android:clickable="false" />

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.SwitchCompat xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="false"
android:clickable="false" />

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.SwitchCompat xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="false"
android:clickable="false" />

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.SwitchCompat xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="false"
android:clickable="false" />

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.SwitchCompat xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="false"
android:clickable="false" />

View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="@dimen/dp_30"
android:paddingEnd="@dimen/dp_30"
android:orientation="vertical"
tools:background="#83000000">
<TextView
android:id="@android:id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/dp_34"
android:layout_gravity="center_vertical"
android:textColor="#FFFFFF"
tools:text="V2X总开关"/>
<LinearLayout
android:id="@android:id/widget_frame"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_20"
android:visibility="gone"
android:orientation="vertical"/>
</LinearLayout>

View File

@@ -0,0 +1,52 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:layout="@layout/layout_operate_panel_preference_category_title"
android:title="业务类">
<SwitchPreferenceCompat
android:key="red_or_green_light_marker"
android:layout="@layout/layout_operate_panel_preference_switch_compat"
android:title="红绿灯标识"
android:widgetLayout="@layout/layout_operate_panel_preference_widget_switch_compat" />
<SwitchPreferenceCompat
android:key="red_or_green_light_merge_marker"
android:layout="@layout/layout_operate_panel_preference_switch_compat"
android:title="红绿灯融合标识"
android:widgetLayout="@layout/layout_operate_panel_preference_widget_switch_compat" />
<SwitchPreferenceCompat
android:key="fault_report_tip"
android:layout="@layout/layout_operate_panel_preference_switch_compat"
android:title="异常上报提示"
android:widgetLayout="@layout/layout_operate_panel_preference_widget_switch_compat" />
<SwitchPreferenceCompat
android:key="limit_speed_marker"
android:layout="@layout/layout_operate_panel_preference_switch_compat"
android:title="限速标识"
android:widgetLayout="@layout/layout_operate_panel_preference_widget_switch_compat" />
<SwitchPreferenceCompat
android:key="self_routing_verify_mode"
android:layout="@layout/layout_operate_panel_preference_switch_compat"
android:title="自主算路验证模式"
android:widgetLayout="@layout/layout_operate_panel_preference_widget_switch_compat" />
<SwitchPreferenceCompat
android:key="look_around_360"
android:layout="@layout/layout_operate_panel_preference_switch_compat"
android:title="360环视"
android:widgetLayout="@layout/layout_operate_panel_preference_widget_switch_compat" />
<SwitchPreferenceCompat
android:key="weather_effect_switch"
android:layout="@layout/layout_operate_panel_preference_switch_compat"
android:title="天气效果开关"
android:widgetLayout="@layout/layout_operate_panel_preference_widget_switch_compat" />
<SwitchPreferenceCompat
android:key="system_boot_status_show"
android:layout="@layout/layout_operate_panel_preference_switch_compat"
android:title="系统启动状态展示"
android:widgetLayout="@layout/layout_operate_panel_preference_widget_switch_compat" />
<Preference
android:key="unmanned_demo_pull_interval"
android:layout="@layout/layout_operate_panel_preference_with_title_above"
android:title="无人化演练任务拉取时间间隔"
android:widgetLayout="@layout/layout_operate_panel_preference_widget_radio_group_custom" />
</PreferenceCategory>
</androidx.preference.PreferenceScreen>

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="美化模式" android:layout="@layout/layout_operate_panel_preference_category_title">
<SwitchPreferenceCompat
android:key="demo_switch"
android:title="美化模式"
android:layout="@layout/layout_operate_panel_preference_switch_compat"
android:widgetLayout="@layout/layout_operate_panel_preference_widget_switch_compat"/>
<SwitchPreferenceCompat
android:key="record_bag_dialog"
android:title="录包弹窗"
android:layout="@layout/layout_operate_panel_preference_switch_compat"
android:widgetLayout="@layout/layout_operate_panel_preference_widget_switch_compat"/>
<SwitchPreferenceCompat
android:key="take_over_wake"
android:title="接管提醒"
android:layout="@layout/layout_operate_panel_preference_switch_compat"
android:widgetLayout="@layout/layout_operate_panel_preference_widget_switch_compat"/>
</PreferenceCategory>
</androidx.preference.PreferenceScreen>

View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="地图效果" android:layout="@layout/layout_operate_panel_preference_category_title">
<SwitchPreferenceCompat
android:key="danger_obstacles_color_mark"
android:title="危险障碍物颜色标记"
android:layout="@layout/layout_operate_panel_preference_switch_compat"
android:widgetLayout="@layout/layout_operate_panel_preference_widget_switch_compat"/>
<SwitchPreferenceCompat
android:key="route_guide_line_dynamic_effect"
android:title="引导线动态效果"
android:layout="@layout/layout_operate_panel_preference_switch_compat"
android:widgetLayout="@layout/layout_operate_panel_preference_widget_switch_compat"/>
<SwitchPreferenceCompat
android:key="point_cloud_effect"
android:title="点云效果"
android:layout="@layout/layout_operate_panel_preference_switch_compat"
android:widgetLayout="@layout/layout_operate_panel_preference_widget_switch_compat"/>
<SwitchPreferenceCompat
android:key="self_car_aperture"
android:title="自车光圈"
android:layout="@layout/layout_operate_panel_preference_switch_compat"
android:widgetLayout="@layout/layout_operate_panel_preference_widget_switch_compat"/>
</PreferenceCategory>
</androidx.preference.PreferenceScreen>

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:layout="@layout/layout_operate_panel_preference_category_title"
android:title="蘑方">
<Preference
android:key="mofang_connect"
android:title="连接蘑方"
android:layout="@layout/layout_operate_panel_preference_mofang_connect"
android:widgetLayout="@layout/layout_operate_panel_preference_widget_mofang_connect"/>
<SwitchPreferenceCompat
android:key="mofang_command_test"
android:layout="@layout/layout_operate_panel_preference_switch_compat"
android:title="蘑方指令测试"
android:widgetLayout="@layout/layout_operate_panel_preference_widget_switch_compat" />
</PreferenceCategory>
</androidx.preference.PreferenceScreen>

View File

@@ -0,0 +1,66 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="V2X" android:layout="@layout/layout_operate_panel_preference_category_title">
<SwitchPreferenceCompat
android:key="v2x_total_switch"
android:title="V2X总开关"
android:layout="@layout/layout_operate_panel_preference_switch_compat"
android:widgetLayout="@layout/layout_operate_panel_preference_widget_switch_compat"/>
<SwitchPreferenceCompat
android:key="v2n_total_switch"
android:title="V2N总开关"
android:layout="@layout/layout_operate_panel_preference_switch_compat"
android:widgetLayout="@layout/layout_operate_panel_preference_widget_switch_compat"/>
<SwitchPreferenceCompat
android:key="v2n_new_linked"
android:title="V2N新链路"
android:dependency="v2n_total_switch"
android:layout="@layout/layout_operate_panel_preference_switch_compat_dependee"
android:widgetLayout="@layout/layout_operate_panel_preference_widget_switch_compat"/>
<SwitchPreferenceCompat
android:key="v2n_new_linked_from_pnc"
android:title="V2N场景进PNC"
android:dependency="v2n_total_switch"
android:layout="@layout/layout_operate_panel_preference_switch_compat_dependee"
android:widgetLayout="@layout/layout_operate_panel_preference_widget_switch_compat"/>
<SwitchPreferenceCompat
android:key="v2n_new_linked_green_wave"
android:title="绿波通行"
android:dependency="v2n_total_switch"
android:layout="@layout/layout_operate_panel_preference_switch_compat_dependee"
android:widgetLayout="@layout/layout_operate_panel_preference_widget_switch_compat"/>
<SwitchPreferenceCompat
android:key="v2i_total_switch"
android:title="V2I总开关"
android:layout="@layout/layout_operate_panel_preference_switch_compat"
android:widgetLayout="@layout/layout_operate_panel_preference_widget_switch_compat"/>
<SwitchPreferenceCompat
android:key="v2i_from_pnc"
android:title="V2I场景进PNC"
android:dependency="v2i_total_switch"
android:layout="@layout/layout_operate_panel_preference_switch_compat_dependee"
android:widgetLayout="@layout/layout_operate_panel_preference_widget_switch_compat"/>
<SwitchPreferenceCompat
android:key="v2i_run_on_red_light"
android:title="闯红灯预警"
android:dependency="v2i_total_switch"
android:layout="@layout/layout_operate_panel_preference_switch_compat_dependee"
android:widgetLayout="@layout/layout_operate_panel_preference_widget_switch_compat"/>
<SwitchPreferenceCompat
android:key="v2i_weakness_participant"
android:title="路侧弱势交通参与者"
android:dependency="v2i_total_switch"
android:layout="@layout/layout_operate_panel_preference_switch_compat_dependee"
android:widgetLayout="@layout/layout_operate_panel_preference_widget_switch_compat"/>
<SwitchPreferenceCompat
android:key="v2v_total_switch"
android:title="V2V总开关"
android:layout="@layout/layout_operate_panel_preference_switch_compat"
android:widgetLayout="@layout/layout_operate_panel_preference_widget_switch_compat"/>
<SwitchPreferenceCompat
android:key="obu_total_switch"
android:title="OBU总开关"
android:layout="@layout/layout_operate_panel_preference_switch_compat"
android:widgetLayout="@layout/layout_operate_panel_preference_widget_switch_compat"/>
</PreferenceCategory>
</androidx.preference.PreferenceScreen>

View File

@@ -0,0 +1,82 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:layout="@layout/layout_operate_panel_preference_category_title"
android:title="车辆相关">
<SwitchPreferenceCompat
android:key="pnc_park_intersection_car"
android:layout="@layout/layout_operate_panel_preference_switch_compat"
android:title="PNC-Park-会车"
android:widgetLayout="@layout/layout_operate_panel_preference_widget_switch_compat" />
<SwitchPreferenceCompat
android:key="pnc_park_overtake_car"
android:layout="@layout/layout_operate_panel_preference_switch_compat"
android:title="PNC-Park-超车"
android:widgetLayout="@layout/layout_operate_panel_preference_widget_switch_compat" />
<SwitchPreferenceCompat
android:key="detour_retard_park"
android:layout="@layout/layout_operate_panel_preference_switch_compat"
android:title="绕障减速停车"
android:widgetLayout="@layout/layout_operate_panel_preference_widget_switch_compat" />
<SwitchPreferenceCompat
android:key="rain_day"
android:layout="@layout/layout_operate_panel_preference_switch_compat"
android:title="雨天模式"
android:widgetLayout="@layout/layout_operate_panel_preference_widget_switch_compat" />
<SwitchPreferenceCompat
android:key="fault_deceleration_park"
android:layout="@layout/layout_operate_panel_preference_switch_compat"
android:title="故障减速停车"
android:widgetLayout="@layout/layout_operate_panel_preference_widget_switch_compat" />
<SwitchPreferenceCompat
android:key="weak_net_deceleration_park"
android:layout="@layout/layout_operate_panel_preference_switch_compat"
android:title="弱网减速停车"
android:widgetLayout="@layout/layout_operate_panel_preference_widget_switch_compat" />
<SwitchPreferenceCompat
android:key="exam_function_panel"
android:layout="@layout/layout_operate_panel_preference_switch_compat"
android:title="考试功能面板"
android:widgetLayout="@layout/layout_operate_panel_preference_widget_switch_compat" />
<CheckBoxPreference
android:key="all_merge_mode"
android:layout="@layout/layout_operate_panel_preference_checkbox_compat"
android:title="全融合模式"
android:widgetLayout="@layout/layout_operate_panel_preference_widget_checkbox_compat" />
<CheckBoxPreference
android:key="blind_area_mode"
android:layout="@layout/layout_operate_panel_preference_checkbox_compat"
android:title="盲区模式"
android:widgetLayout="@layout/layout_operate_panel_preference_widget_checkbox_compat" />
<CheckBoxPreference
android:key="beyond_visual_range_mode"
android:layout="@layout/layout_operate_panel_preference_checkbox_compat"
android:title="超视距模式"
android:widgetLayout="@layout/layout_operate_panel_preference_widget_checkbox_compat" />
<CheckBoxPreference
android:key="transparent_transfer_mode"
android:layout="@layout/layout_operate_panel_preference_checkbox_compat"
android:title="超视距模式"
android:widgetLayout="@layout/layout_operate_panel_preference_widget_checkbox_compat" />
<CheckBoxPreference
android:key="pure_obu_mode"
android:layout="@layout/layout_operate_panel_preference_checkbox_compat"
android:title="纯路侧模式"
android:widgetLayout="@layout/layout_operate_panel_preference_widget_checkbox_compat" />
<Preference
android:key="auto_pilot_speed_thresholds"
android:layout="@layout/layout_operate_panel_preference_with_title_above"
android:title="自动驾驶速度阈值"
android:widgetLayout="@layout/layout_operate_panel_preference_widget_edit_with_button" />
<Preference
android:key="change_lane_speed_thresholds"
android:title="变道速度阈值"
android:layout="@layout/layout_operate_panel_preference_with_title_above"
android:widgetLayout="@layout/layout_operate_panel_preference_widget_edit_with_button" />
<Preference
android:key="overtake_speed_thresholds"
android:title="超车速度阈值"
android:layout="@layout/layout_operate_panel_preference_with_title_above"
android:widgetLayout="@layout/layout_operate_panel_preference_widget_edit_with_button" />
</PreferenceCategory>
</androidx.preference.PreferenceScreen>

View File

@@ -0,0 +1,34 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<Preference
android:fragment="com.mogo.eagle.core.function.hmi.ui.operate.OperatePanelLayout$V2XPreferenceFragmentCompat"
android:key="v2x"
android:selectable="true"
android:layout="@layout/layout_operate_panel_preference_header"
android:title="V2X" />
<Preference
android:fragment="com.mogo.eagle.core.function.hmi.ui.operate.OperatePanelLayout$HdMapPreferenceFragmentCompat"
android:key="hdmap"
android:layout="@layout/layout_operate_panel_preference_header"
android:title="地图效果" />
<Preference
android:fragment="com.mogo.eagle.core.function.hmi.ui.operate.OperatePanelLayout$DemoPreferenceFragmentCompat"
android:key="demo"
android:layout="@layout/layout_operate_panel_preference_header"
android:title="美化模式" />
<Preference
android:fragment="com.mogo.eagle.core.function.hmi.ui.operate.OperatePanelLayout$VehiclesPreferenceFragmentCompat"
android:key="vehicle"
android:layout="@layout/layout_operate_panel_preference_header"
android:title="车辆相关" />
<Preference
android:fragment="com.mogo.eagle.core.function.hmi.ui.operate.OperatePanelLayout$BusinessPreferenceFragmentCompat"
android:key="biz"
android:layout="@layout/layout_operate_panel_preference_header"
android:title="业务类" />
<Preference
android:fragment="com.mogo.eagle.core.function.hmi.ui.operate.OperatePanelLayout$MoFangPreferenceFragmentCompat"
android:key="mofang"
android:layout="@layout/layout_operate_panel_preference_header"
android:title="蘑方" />
</androidx.preference.PreferenceScreen>

View File

@@ -246,4 +246,9 @@ interface IMoGoHmiProvider :IProvider{
* 注册 工具箱 item点击事件监听 (默认样式item的点击事件监听自定义样式的item的点击交给view自己处理)
*/
fun registerToolKitDefaultItemClickListener( tag: String, listener: IToolKitItemClickListener)
/**
* 显示/隐藏 运营面板
*/
fun toggleOperatePanel(show: Boolean)
}

View File

@@ -360,4 +360,11 @@ object CallerHmiManager {
fun registerToolKitDefaultItemClickListener(tag: String, listener: IToolKitItemClickListener) {
hmiProviderApi?.registerToolKitDefaultItemClickListener(tag, listener)
}
/**
* 显示/隐藏 运营面板
*/
fun toggleOperatePanel(show: Boolean) {
hmiProviderApi?.toggleOperatePanel(show)
}
}

View File

@@ -4,6 +4,7 @@ import android.annotation.*
import android.app.Activity
import android.graphics.Rect
import android.graphics.drawable.ColorDrawable
import android.transition.Transition
import android.util.Log
import android.view.Gravity
import android.view.LayoutInflater
@@ -50,6 +51,10 @@ class MoGoPopWindow private constructor(builder: Builder){
private val onViewAttachedToWindow: ((content: View) -> Unit)? = builder.onViewAttachedToWindow
private val enterTransition: Transition? = builder.enterTransition
private val exitTransition: Transition? = builder.exitTransition
@SuppressLint("ClickableViewAccessibility") fun show() {
if (isPendingShow.get() || pop.isShowing) {
return
@@ -58,12 +63,18 @@ class MoGoPopWindow private constructor(builder: Builder){
activity.lifeCycleScope.launchWhenResumed {
val parent = activity.findViewById<View>(android.R.id.content) ?: throw AssertionError("附着的Activity上的ID为[android.R.id.content]的控件不存在.")
pop.contentView = content
pop.isAttachedInDecor = true
pop.isAttachedInDecor = false
pop.setBackgroundDrawable(ColorDrawable())
content.doOnAttach {
onViewAttachedToWindow?.invoke(content)
onShowed?.invoke()
}
if (enterTransition != null) {
pop.enterTransition = enterTransition
}
if (exitTransition != null) {
pop.exitTransition = exitTransition
}
pop.setOnDismissListener {
onDismissed?.invoke()
}
@@ -113,17 +124,11 @@ class MoGoPopWindow private constructor(builder: Builder){
val oldX = params.x
val oldY = params.y
Logger.d(TAG, "oldX: $oldX, oldY: $oldY, dx: $dx, dy:$dy")
var newX = oldX + dx
var newY = oldY + dy
val newX = oldX + dx
val newY = oldY + dy
if (outer.contains(rawX.toInt(), rawY.toInt())) {
val width = activity.resources.displayMetrics.widthPixels
val height = activity.resources.displayMetrics.heightPixels
// if (newX < 0) {
// newX += newX
// }
// if (newY < 0) {
// newY += height
// }
Logger.d(TAG, "screen_width: $width, screen_height: $height, newX: $newX, newY: $newY, rawX: ${rawX.toInt()}, rawY: ${rawY.toInt()}, width: ${content.width}, height: ${content.height}")
pop.update(newX, newY, content.width, content.height)
}
@@ -244,6 +249,16 @@ class MoGoPopWindow private constructor(builder: Builder){
*/
internal var onViewAttachedToWindow: ((content: View) -> Unit)? = null
/**
* 进场动画
*/
internal var enterTransition: Transition? = null
/**
* 出场动画
*/
internal var exitTransition: Transition? = null
fun contentView(content: View) = apply {
this.content = content
}
@@ -296,6 +311,11 @@ class MoGoPopWindow private constructor(builder: Builder){
this.onDismissed = block
}
fun transition(enter: Transition?, exit: Transition?) = apply {
this.enterTransition = enter
this.exitTransition = exit
}
fun onViewAttachedToWindow(block: (content: View) -> Unit) = apply {
this.onViewAttachedToWindow = block
}