diff --git a/core/function-impl/mogo-core-function-hmi/src/main/AndroidManifest.xml b/core/function-impl/mogo-core-function-hmi/src/main/AndroidManifest.xml index d9654fcfe8..ce62c801cf 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/AndroidManifest.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/AndroidManifest.xml @@ -2,8 +2,10 @@ - + + + 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 e435051247..311698c583 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 @@ -70,6 +70,7 @@ import com.mogo.eagle.core.function.hmi.ui.setting.IPCReportWindow import com.mogo.eagle.core.function.hmi.ui.setting.ReportListFloatWindow import com.mogo.eagle.core.function.hmi.ui.tools.AdUpgradeDialog import com.mogo.eagle.core.function.hmi.ui.tools.AutoPilotAndCheckView +import com.mogo.eagle.core.function.hmi.ui.tools.MaskView import com.mogo.eagle.core.function.hmi.ui.widget.V2XNotificationView import com.mogo.eagle.core.utilcode.kotlin.* import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils @@ -127,6 +128,9 @@ import java.util.* // 检测、自动驾驶速度设置 private var toolsViewFloat: WarningFloat.Builder? = null + private var maskViewFloat: WarningFloat.Builder? = null + private var maskView: MaskView? = null + private var upgradeTipsView: (() -> View)? = null // HMI 视图控件代理 @@ -956,6 +960,62 @@ import java.util.* cameraListView?.showNoSignal() } + /** + * 展示蒙层 TODO + */ + override fun showMaskView() { + if (maskViewFloat == null) { + context?.let { + if (maskViewFloat == null) { + if (maskView == null) { + maskView = MaskView(it) + } + + maskViewFloat = WarningFloat.with(it) + .setTag("MaskViewFloat") + .setLayout(maskView!!) + .setSidePattern(SidePattern.LEFT) + .setGravity(Gravity.CENTER) + .setImmersionStatusBar(true) + .setWindowHeight(LayoutParams.MATCH_PARENT) + .setWindowWidth(LayoutParams.MATCH_PARENT) + .setCountDownTime(6000) + .setAnimator(object : DefaultAnimator() { + override fun enterAnim( + view: View, + params: LayoutParams, + windowManager: WindowManager, + sidePattern: SidePattern + ): Animator? = + super.enterAnim(view, params, windowManager, sidePattern) + ?.apply { + interpolator = OvershootInterpolator() + } + + override fun exitAnim( + view: View, + params: LayoutParams, + windowManager: WindowManager, + sidePattern: SidePattern + ): Animator? = + super.exitAnim(view, params, windowManager, sidePattern) + ?.setDuration(200) + }) + .addWarningStatusListener(object : IMoGoWarningStatusListener { + override fun onDismiss() { + maskViewFloat = null + maskView = null + // TODO:("") + } + }) + .show() + } else { + maskViewFloat?.show() + } + } + } + } + override fun showToolsView() { if (toolsViewFloat == null) { showToolsFloat() diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/MaskView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/MaskView.kt new file mode 100644 index 0000000000..8592692e41 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/MaskView.kt @@ -0,0 +1,42 @@ +package com.mogo.eagle.core.function.hmi.ui.tools + +import android.annotation.SuppressLint +import android.content.Context +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.util.AttributeSet +import android.view.LayoutInflater +import android.widget.FrameLayout +import com.mogo.eagle.core.function.hmi.R + +/** + * @author lixiaopeng + * 蒙层view + */ +class MaskView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : FrameLayout( + context, + attrs, + defStyleAttr +) { + + private val TAG = "MaskView" + + init { + LayoutInflater.from(context).inflate(R.layout.view_mask, this, true) + initView() + } + + companion object { + private var speedLimit: Double = 0.0 + } + + @SuppressLint("ClickableViewAccessibility") + private fun initView() { +// background = ColorDrawable(Color.parseColor("#F0151D41")) + } + +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainLauncherActivity.java b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainLauncherActivity.java index f9f724cd1f..e70c983ad2 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainLauncherActivity.java +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainLauncherActivity.java @@ -5,6 +5,8 @@ import static com.mogo.eagle.core.data.deva.chain.ChainConstant.CHAIN_LINK_INIT; import static com.mogo.eagle.core.data.deva.chain.ChainConstant.CHAIN_LINK_LOG_CONNECT_STATUS; import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_HMI; +import android.bluetooth.BluetoothAdapter; +import android.bluetooth.BluetoothDevice; import android.content.Intent; import android.os.Bundle; import android.os.Handler; @@ -23,6 +25,7 @@ import com.mogo.eagle.core.data.config.FunctionBuildConfig; import com.mogo.eagle.core.function.api.base.IMoGoFunctionProvider; import com.mogo.eagle.core.function.api.setting.IMoGoSkinModeChangeListener; import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotManager; +import com.mogo.eagle.core.function.call.hmi.CallerHmiManager; import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager; import com.mogo.eagle.core.function.call.setting.CallerSkinModeListenerManager; import com.mogo.eagle.core.function.hmi.R; @@ -30,6 +33,7 @@ import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.util.BarUtils; import com.mogo.eagle.core.utilcode.util.ToastUtils; +import com.mogo.map.MogoMapUIController; import com.mogo.service.intent.IMogoIntentListener; import com.rousetime.android_startup.model.CostTimesModel; import com.zhjt.service.chain.ChainLog; @@ -38,7 +42,10 @@ import com.zhjt.service.chain.TracingConstants; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.util.List; +import java.util.Set; import java.util.Timer; import java.util.TimerTask; @@ -57,6 +64,8 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis private Timer timerHorn; private Timer timerAcc; + private BluetoothAdapter mBluetoothAdapter; + private boolean isConnected; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { @@ -64,6 +73,8 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis DebugConfig.setNeedRequestUserInfo(true); EventBus.getDefault().register(this); CallerLogger.INSTANCE.i(M_HMI + TAG, "onCreate"); + + mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); } @Override @@ -171,26 +182,44 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) { //向上长按 - ToastUtils.showShort("↑↑↑"); + ToastUtils.showShort("长按 ↑↑↑"); return true; } else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) { //下和中间键盘长按,减速为-2 - ToastUtils.showShort("↓↓↓"); + ToastUtils.showShort("长按 ↓↓↓"); sendAcc(true, -2); return true; } return super.onKeyDown(keyCode, event); } + @Override + public boolean dispatchKeyEvent(KeyEvent event) { + Log.d("liyz", "dispatchKeyEvent code = " + event.getKeyCode()); + if (isConnected) { //如果连接蓝牙设备,屏蔽触摸事件 + return true; + } else { + return false; + } + +// return super.dispatchKeyEvent(event); + } + + @Override public boolean dispatchTouchEvent(MotionEvent event) { Log.d("liyz", "dispatchTouchEvent event.getX() = " + event.getX() + "--event.getY() = " + event.getY()); -// CallerMapUIServiceManager.INSTANCE.getMapUIController().changeZoom(0); if (event.getX() == -1469.6875 && event.getY() == 530.0) { //向左变道 ToastUtils.showShort("← 向左变道"); CallerAutoPilotManager.INSTANCE.sendOperatorChangeLaneLeft(); +// MogoMapUIController.getInstance().setLockMode( true ); + + CallerHmiManager.INSTANCE.showModifyBindingcarDialog(); + showBondedDevice(mBluetoothAdapter); + return true; } else if (event.getX() == -1096.25 && event.getY() == 132.5) { //鸣笛 ToastUtils.showShort("↑ 鸣笛 "); +// MogoMapUIController.getInstance().setLockMode( true ); CallerAutoPilotManager.INSTANCE.sendOperatorSetHorn(1); timerHorn = new Timer(); timerHorn.schedule(new TimerTask() { @@ -204,14 +233,17 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis return true; } else if (event.getX() == -863.4375 && event.getY() == 690.0) { //向右变道 CallerAutoPilotManager.INSTANCE.sendOperatorChangeLaneRight(); +// MogoMapUIController.getInstance().setLockMode( true ); ToastUtils.showShort("→ 向右变道"); return true; } else if (event.getX() == -1096.25 && event.getY() == 1099.0) { // -1减速 - sendAcc(true, -1); //TODO 需要可以配置 + sendAcc(true, -1); //TODO 需要可以配置,向下直接退出鹰眼了,这个必须处理 ToastUtils.showShort("↓"); +// MogoMapUIController.getInstance().setLockMode( true ); return true; } else if (event.getX() == -1096.25 && event.getY() == 690.0) { //复原 ToastUtils.showShort("O 复原 "); +// MogoMapUIController.getInstance().setLockMode( true ); sendAcc(false, 0.0); return true; } @@ -247,6 +279,7 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis return super.onTouchEvent(event); } + @Override public void onSkinModeChange(int skinMode) { if (skinMode == 0) { @@ -277,5 +310,24 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis } } + private void showBondedDevice(BluetoothAdapter bluetoothAdapter) { + Set deviceList = bluetoothAdapter.getBondedDevices(); + for (BluetoothDevice device : deviceList) { + Log.d("liyz", "Name:" + device.getName() + " Mac:" + device.getAddress()); + try { + //使用反射调用获取设备连接状态方法 + Method isConnectedMethod = BluetoothDevice.class.getDeclaredMethod("isConnected", (Class[]) null); + isConnectedMethod.setAccessible(true); + boolean isConnected = (boolean) isConnectedMethod.invoke(device, (Object[]) null); + Log.d("Jason", "isConnected:" + isConnected); + } catch (NoSuchMethodException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (InvocationTargetException e) { + e.printStackTrace(); + } + } + } } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_mask.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_mask.xml new file mode 100644 index 0000000000..3b9f1a293c --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_mask.xml @@ -0,0 +1,19 @@ + + + + + + \ No newline at end of file diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoWaringProvider.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoWaringProvider.kt index 8caf4e8cbb..5677f6a4c9 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoWaringProvider.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoWaringProvider.kt @@ -188,6 +188,8 @@ interface IMoGoWaringProvider : IMoGoHmiViewProxy { fun hideToolsView() + fun showMaskView() + /** * 加载全览模式图层 */ diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt index 9e2174391c..2bd6171500 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt @@ -311,6 +311,10 @@ object CallerHmiManager : CallerBase() { waringProviderApi?.hideSmallFragment() } + fun showMaskView() { + waringProviderApi?.showMaskView() + } + /** *注册工控机升级提示圆点View的回调 * @param 提示圆点View diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java index 77bdbca240..0f16e30760 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java @@ -313,4 +313,10 @@ public interface IMogoMapUIController { * @return angle */ Double getRoadAngle(Double lon,Double lat,float angle); + + /** + * 设置锁屏模式 + */ + void setLockMode(boolean isLock); + } diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java b/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java index 1ea27213cb..46a12025ba 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java +++ b/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java @@ -1110,4 +1110,10 @@ public class AMapViewWrapper implements IMogoMapView, }, 1000L); } } + + @Override + public void setLockMode(boolean isLock) { + mMapView.getMapAutoViewHelper().setLockMode(true); + } + } diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java index dfd5bc2d1a..2fda4c14e1 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java +++ b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java @@ -354,6 +354,7 @@ public class MogoMapUIController implements IMogoMapUIController { } + @Override public void stepInVrMode(boolean isDayMode) { initDelegate(); @@ -403,4 +404,12 @@ public class MogoMapUIController implements IMogoMapUIController { } return 0.0; } + + @Override + public void setLockMode(boolean isLock) { + initDelegate(); + if (mDelegate != null) { + mDelegate.setLockMode(isLock); + } + } } diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/uicontroller/AMapUIController.java b/libraries/mogo-map/src/main/java/com/mogo/map/uicontroller/AMapUIController.java index efba482a0e..01c725a751 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/uicontroller/AMapUIController.java +++ b/libraries/mogo-map/src/main/java/com/mogo/map/uicontroller/AMapUIController.java @@ -340,4 +340,12 @@ public class AMapUIController implements IMogoMapUIController { } return 0.0; } + + @Override + public void setLockMode(boolean isLock) { + if (mClient != null) { + mClient.setLockMode(isLock); + } + } + }