From fee278b2baa3f0b263848beef37564612758c492 Mon Sep 17 00:00:00 2001 From: renwj Date: Wed, 3 Jul 2024 16:18:14 +0800 Subject: [PATCH] =?UTF-8?q?[6.5.0][=E9=81=93=E8=B7=AF=E4=BA=8B=E4=BB=B6]?= =?UTF-8?q?=20=E7=BB=BF=E6=B3=A2=E9=80=9A=E8=A1=8CUI=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hmi/ui/greenwave/GreenWaveView.kt | 161 ++++++++++++++++++ .../icon_green_wave_alpha_high.png | Bin 0 -> 4456 bytes .../icon_green_wave_alpha_low.png | Bin 0 -> 5661 bytes .../icon_green_wave_alpha_mid.png | Bin 0 -> 5014 bytes .../res/drawable/bg_green_wave_driver.xml | 6 + .../res/drawable/bg_green_wave_passenger.xml | 8 + .../res/drawable/bg_white_circle_driver.xml | 6 + .../drawable/bg_white_circle_passenger.xml | 9 + .../layout/view_green_wave_driver_layout.xml | 76 +++++++++ .../view_green_wave_passenger_layout.xml | 76 +++++++++ 10 files changed, 342 insertions(+) create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/greenwave/GreenWaveView.kt create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_green_wave_alpha_high.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_green_wave_alpha_low.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_green_wave_alpha_mid.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_green_wave_driver.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_green_wave_passenger.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_white_circle_driver.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_white_circle_passenger.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_green_wave_driver_layout.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_green_wave_passenger_layout.xml diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/greenwave/GreenWaveView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/greenwave/GreenWaveView.kt new file mode 100644 index 0000000000..0744769176 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/greenwave/GreenWaveView.kt @@ -0,0 +1,161 @@ +package com.mogo.eagle.core.function.hmi.ui.greenwave + +import android.content.Context +import android.os.Looper +import android.util.AttributeSet +import android.view.LayoutInflater +import android.view.MotionEvent +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout +import androidx.core.content.ContextCompat +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.mogo.eagle.core.data.config.FunctionBuildConfig +import com.mogo.eagle.core.data.map.MogoLocation +import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationGCJ02Listener +import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager +import com.mogo.eagle.core.function.hmi.R +import com.mogo.eagle.core.utilcode.kotlin.scope +import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils +import com.mogo.eagle.core.utilcode.rv.divider.CommonDividerItemDecoration +import com.mogo.eagle.core.utilcode.util.SizeUtils +import com.mogo.eagle.core.utilcode.util.UiThreadHandler +import kotlinx.coroutines.Runnable +import kotlinx.coroutines.launch +import kotlin.math.abs +import kotlinx.android.synthetic.main.view_green_wave_passenger_layout.view.speed as passenger_speed +import kotlinx.android.synthetic.main.view_green_wave_driver_layout.view.speed as driver_speed +import kotlinx.android.synthetic.main.view_green_wave_passenger_layout.view.wave_rv as passenger_wave_rv +import kotlinx.android.synthetic.main.view_green_wave_driver_layout.view.wave_rv as driver_wave_rv +import kotlinx.android.synthetic.main.view_green_wave_passenger_layout.view.recommend_speed as passenger_recommend_speed +import kotlinx.android.synthetic.main.view_green_wave_driver_layout.view.recommend_speed as driver_recommend_speed +import kotlinx.android.synthetic.main.view_green_wave_passenger_layout.view.recommend_cross as passenger_recommend_cross +import kotlinx.android.synthetic.main.view_green_wave_driver_layout.view.recommend_cross as driver_recommend_cross + +class GreenWaveView: LinearLayout, IMoGoChassisLocationGCJ02Listener, RecyclerView.OnItemTouchListener, Runnable { + + companion object { + private const val TAG = "GreenWaveView" + } + + private var lastSpeed: Int = Int.MIN_VALUE + + 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) { + LayoutInflater.from(context).inflate(if (isDriver) R.layout.view_green_wave_driver_layout else R.layout.view_green_wave_passenger_layout, this) + background = if (isDriver) ContextCompat.getDrawable(context, R.drawable.bg_green_wave_driver) else ContextCompat.getDrawable(context, R.drawable.bg_green_wave_passenger) + } + + private val isDriver by lazy { + AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode) + } + + private class WaveHolder(item: ImageView): RecyclerView.ViewHolder(item) + + private class WaveAdapter: RecyclerView.Adapter() { + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): WaveHolder { + val item = ImageView(parent.context) + item.layoutParams = RecyclerView.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT) + return WaveHolder(item) + } + + override fun getItemCount(): Int { + return 5000 + } + + override fun onBindViewHolder(holder: WaveHolder, position: Int) { + val item = holder.itemView as? ImageView ?: return + val reminder = position % 3 + when(reminder) { + 0 -> { + item.background = ContextCompat.getDrawable(item.context, R.drawable.icon_green_wave_alpha_low) + } + 1 -> { + item.background = ContextCompat.getDrawable(item.context, R.drawable.icon_green_wave_alpha_mid) + } + else -> { + item.background = ContextCompat.getDrawable(item.context, R.drawable.icon_green_wave_alpha_high) + } + } + } + } + + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + CallerChassisLocationGCJ02ListenerManager.addListener(TAG, 5, this) + val rv: RecyclerView? = if (isDriver) driver_wave_rv else passenger_wave_rv + rv?.addItemDecoration(CommonDividerItemDecoration.Builder() + .spanCountTBCare(false) + .horizontalInnerSpace(SizeUtils.dp2px(10f)) + .build()) + rv?.addOnItemTouchListener(this) + rv?.layoutManager = LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, true) + rv?.adapter = WaveAdapter() + startAutoScroll() + } + + private fun startAutoScroll() { + removeCallbacks(this) + post(this) + } + + private fun stopAutoScroll() { + removeCallbacks(this) + } + + override fun run() { + val rv: RecyclerView? = if (isDriver) driver_wave_rv else passenger_wave_rv + rv?.scrollBy(-3, 0) + postDelayed(this, 20) + } + + override fun onInterceptTouchEvent(rv: RecyclerView, e: MotionEvent): Boolean { + return true + } + + override fun onTouchEvent(rv: RecyclerView, e: MotionEvent) { } + + override fun onRequestDisallowInterceptTouchEvent(disallowIntercept: Boolean) { } + + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + CallerChassisLocationGCJ02ListenerManager.removeListener(TAG) + val rv: RecyclerView? = if (isDriver) driver_wave_rv else passenger_wave_rv + rv?.removeOnItemTouchListener(this) + stopAutoScroll() + } + + override fun onChassisLocationGCJ02(mogoLocation: MogoLocation?) { + var isChanged = false + val speed = (abs(mogoLocation?.gnssSpeed ?: 0f) * 3.6f).toInt() + if (lastSpeed != speed) { + isChanged = true + lastSpeed = speed + } + if (isChanged) { + UiThreadHandler.post { + if (isDriver) { + driver_speed?.text = speed.toString() + } else { + passenger_speed?.text = speed.toString() + } + } + } + } + + fun bind(minSpeed: Int, maxSpeed: Int, cross: Int) { + scope.launch { + if (isDriver) { + driver_recommend_speed?.text = "建议车速${minSpeed}-${maxSpeed}km/h" + driver_recommend_cross?.text = "可丝滑通过${cross}个路口" + } else { + passenger_recommend_speed?.text = "建议车速${minSpeed}-${maxSpeed}km/h" + passenger_recommend_cross?.text = "可丝滑通过${cross}个路口" + } + } + } +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_green_wave_alpha_high.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_green_wave_alpha_high.png new file mode 100644 index 0000000000000000000000000000000000000000..01d57b1544d8889a41f468a80dd530a39f2f5012 GIT binary patch literal 4456 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 + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_green_wave_passenger.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_green_wave_passenger.xml new file mode 100644 index 0000000000..3bea23da6e --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_green_wave_passenger.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_white_circle_driver.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_white_circle_driver.xml new file mode 100644 index 0000000000..8b6f3a410f --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_white_circle_driver.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_white_circle_passenger.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_white_circle_passenger.xml new file mode 100644 index 0000000000..84d954e2d9 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_white_circle_passenger.xml @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_green_wave_driver_layout.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_green_wave_driver_layout.xml new file mode 100644 index 0000000000..e1a921c747 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_green_wave_driver_layout.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_green_wave_passenger_layout.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_green_wave_passenger_layout.xml new file mode 100644 index 0000000000..c4d12ad34f --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_green_wave_passenger_layout.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file