diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/map/switchvisual/VisualViewModel.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/map/switchvisual/VisualViewModel.kt index 8ab46c8ee7..3fd5f7993e 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/map/switchvisual/VisualViewModel.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/map/switchvisual/VisualViewModel.kt @@ -32,8 +32,8 @@ class VisualViewModel : ViewModel(), } override fun onSceneChanged(scene: Scene) { - if (scene.isCanSwitch) {// 可切换 - when (scene.angle) { + if (scene.isCanSwitch()) {// 可切换 + when (scene.getVisualAngleMode()) { VisualAngleMode.MODE_MEDIUM_SIGHT -> { UiThreadHandler.post({ this.viewCallback?.setViewShow(true) diff --git a/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/debug/DebugViewModel.kt b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/debug/DebugViewModel.kt index 74a1a957b9..2c397cef64 100644 --- a/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/debug/DebugViewModel.kt +++ b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/debug/DebugViewModel.kt @@ -33,8 +33,8 @@ class DebugViewModel : ViewModel(), } override fun onSceneChanged(scene: Scene) { - if (scene.isCanSwitch) {// 可切换 - when (scene.angle) { + if (scene.isCanSwitch()) {// 可切换 + when (scene.getVisualAngleMode()) { VisualAngleMode.MODE_MEDIUM_SIGHT -> { UiThreadHandler.post({ this.viewCallback?.setViewShow(true) diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/angle/MoGoVisualAngleChangeProvider.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/angle/MoGoVisualAngleChangeProvider.kt index d904d799ce..0a22da8fa6 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/angle/MoGoVisualAngleChangeProvider.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/angle/MoGoVisualAngleChangeProvider.kt @@ -152,7 +152,7 @@ class MoGoVisualAngleChangeProvider: IMoGoVisualAngleChangeProvider { override fun changeScene(scene: Scene) { prevJob?.safeCancel() scope.launch { - val delay = scene.delay + val delay = scene.getDelay() if (delay > 0) { delay(delay) } @@ -165,8 +165,8 @@ class MoGoVisualAngleChangeProvider: IMoGoVisualAngleChangeProvider { verifyPrior = false } if (verifyPrior) { - val lastPriority = prev?.priority ?: Int.MIN_VALUE - val currentPriority = scene.priority + val lastPriority = prev?.getPriority() ?: Int.MIN_VALUE + val currentPriority = scene.getPriority() if (lastPriority > currentPriority) { return@launch } @@ -182,18 +182,19 @@ class MoGoVisualAngleChangeProvider: IMoGoVisualAngleChangeProvider { } private fun doChangeAngle(target: Scene) { - val angle = target.angle + val angle = target.getVisualAngleMode() CallerMapUIServiceManager.getMapUIController()?.also { Log.d(TAG, "--- doChangeAngle ---: $target") val prev = prevScene.get() try { - if (!target.isCanTouch) { + if (!target.isCanTouch()) { CallerMapUIServiceManager.getMapUIController()?.setAllGesturesEnabled(false) } else { CallerMapUIServiceManager.getMapUIController()?.setAllGesturesEnabled(true) } val screenToOriginDis = target.getScreenToOriginDis() when(screenToOriginDis) { + ScreenToOriginDis.NONE -> {} DEFAULT -> CallerMapUIServiceManager.getMapUIController()?.setScreenToOriginDis(4.0f) UP -> CallerMapUIServiceManager.getMapUIController()?.setScreenToOriginDis(3.0f) DOWN -> CallerMapUIServiceManager.getMapUIController()?.setScreenToOriginDis(5.0f) @@ -206,9 +207,9 @@ class MoGoVisualAngleChangeProvider: IMoGoVisualAngleChangeProvider { notifyChanged(target) } prevScene.set(target) - if (target.displayThreshold > 0) { + if (target.getDisplayThreshold() > 0) { scope.launch { - delay(target.displayThreshold) + delay(target.getDisplayThreshold()) doChangeAngle(Default()) } } diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/angle/scenes/CrossRoad.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/angle/scenes/CrossRoad.kt index 4b4227754f..785c3f12c1 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/angle/scenes/CrossRoad.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/angle/scenes/CrossRoad.kt @@ -1,8 +1,11 @@ package com.mogo.eagle.core.function.angle.scenes +import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.function.api.map.angle.Scene import com.mogo.eagle.core.function.api.map.angle.ScreenToOriginDis import com.mogo.eagle.core.function.api.map.angle.ScreenToOriginDis.DOWN +import com.mogo.eagle.core.function.api.map.angle.ScreenToOriginDis.NONE +import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils import com.mogo.map.uicontroller.VisualAngleMode import com.mogo.map.uicontroller.VisualAngleMode.MAP_STYLE_VR_ANGLE_CROSS_NEW import java.util.concurrent.TimeUnit @@ -10,28 +13,32 @@ import java.util.concurrent.TimeUnit /** * 十字路口 */ -class CrossRoad(private val delayTime: Long = 0, private val unit: TimeUnit = TimeUnit.SECONDS): Scene { - override val angle: VisualAngleMode - get() = MAP_STYLE_VR_ANGLE_CROSS_NEW +class CrossRoad(private val delayTime: Long = 0, unit: TimeUnit = TimeUnit.SECONDS) : + Scene(delayTime, unit) { - override val priority: Int = 0 - override val displayThreshold: Long - get() = -1 + override fun getVisualAngleMode(): VisualAngleMode { + if (AppIdentityModeUtils.isB2(FunctionBuildConfig.appIdentityMode)) { + return VisualAngleMode.MAP_STYLE_VR_ANGLE_CROSS + } + return MAP_STYLE_VR_ANGLE_CROSS_NEW + } - override val delay: Long - get() = unit.toMillis(delayTime) + override fun isCanTouch(): Boolean { + return false + } - override val isCanSwitch: Boolean - get() = false - - override val isCanTouch: Boolean - get() = false + override fun isCanSwitch(): Boolean { + return false + } override fun toString(): String { - return "CrossRoad(delayTime=${delayTime}, priority=${priority}, displayThreshold: ${displayThreshold}, priority=${priority})" + return "CrossRoad(delayTime=${delayTime}, priority=${getPriority()}, displayThreshold: ${getDisplayThreshold()}, priority=${getPriority()})" } override fun getScreenToOriginDis(): ScreenToOriginDis { + if (AppIdentityModeUtils.isB2(FunctionBuildConfig.appIdentityMode)) { + return NONE + } return DOWN } } diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/angle/scenes/Default.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/angle/scenes/Default.kt index f6f16ba578..1d2ce42466 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/angle/scenes/Default.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/angle/scenes/Default.kt @@ -1,37 +1,29 @@ package com.mogo.eagle.core.function.angle.scenes +import android.util.Log +import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.function.api.map.angle.Scene import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager +import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils import com.mogo.map.uicontroller.VisualAngleMode import com.mogo.map.uicontroller.VisualAngleMode.MODE_MEDIUM_SIGHT import java.util.concurrent.TimeUnit /** * 默认视图 - * @param delay: 表示多少稍后,默认值为2 - * @param unit: 时间单位,默认为秒 */ +class Default(val delayTime: Long = 0, val unit: TimeUnit = TimeUnit.SECONDS, val forceClosePrev: Boolean = false): Scene(delayTime, unit) { -class Default(val delayTime: Long = 0, val unit: TimeUnit = TimeUnit.SECONDS, val forceClosePrev: Boolean = false): Scene { - - override val angle: VisualAngleMode - get() = CallerMapUIServiceManager.getMapUIController()?.getVrAngleDefaultMode() ?: MODE_MEDIUM_SIGHT - - override val priority: Int = 0 - - override val displayThreshold: Long - get() = 0 - - override val delay: Long - get() = unit.toMillis(delayTime) - - override val isCanSwitch: Boolean - get() = true - - override val isCanTouch: Boolean - get() = true + override fun getVisualAngleMode(): VisualAngleMode { + Log.d("Default", "---- 1 --------------") + if (AppIdentityModeUtils.isB2(FunctionBuildConfig.appIdentityMode)) { + Log.d("Default", "---- 2 --------------") + return VisualAngleMode.MAP_STYLE_VR_ERHAI_B2 + } + return CallerMapUIServiceManager.getMapUIController()?.getVrAngleDefaultMode() ?: MODE_MEDIUM_SIGHT + } override fun toString(): String { - return "Default(delay=$delay, unit=$unit, angle=$angle, priority=$priority, closePrevious=$forceClosePrev)" + return "Default(delay=${getDelay()}, unit=$unit, angle=${getVisualAngleMode()}, priority=${getPriority()}, closePrevious=$forceClosePrev)" } } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/angle/scenes/LongSight.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/angle/scenes/LongSight.kt index a26ac58437..3189dcd1e7 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/angle/scenes/LongSight.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/angle/scenes/LongSight.kt @@ -5,21 +5,13 @@ import com.mogo.map.uicontroller.VisualAngleMode import com.mogo.map.uicontroller.VisualAngleMode.MODE_LONG_SIGHT import java.util.concurrent.TimeUnit -class LongSight(private val delayTime: Long = 0, private val unit: TimeUnit = TimeUnit.SECONDS): Scene { +class LongSight(private val delayTime: Long = 0, private val unit: TimeUnit = TimeUnit.SECONDS): Scene(delayTime, unit) { - override val angle: VisualAngleMode - get() = MODE_LONG_SIGHT - override val priority: Int - get() = 0 - override val displayThreshold: Long - get() = -1 + override fun getVisualAngleMode(): VisualAngleMode { + return MODE_LONG_SIGHT + } - override val delay: Long - get() = unit.toMillis(delayTime) - - override val isCanSwitch: Boolean - get() = true - - override val isCanTouch: Boolean - get() = true + override fun toString(): String { + return "LongSight(delayTime=${delayTime}, priority=${getPriority()}, displayThreshold: ${getDisplayThreshold()}, priority=${getPriority()})" + } } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/angle/scenes/RoadEvent.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/angle/scenes/RoadEvent.kt index 5244428bac..b2b97f9b79 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/angle/scenes/RoadEvent.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/angle/scenes/RoadEvent.kt @@ -1,33 +1,27 @@ package com.mogo.eagle.core.function.angle.scenes +import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.function.api.map.angle.Scene import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager +import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils import com.mogo.map.uicontroller.VisualAngleMode +import com.mogo.map.uicontroller.VisualAngleMode.MAP_STYLE_VR_ERHAI_B2 import com.mogo.map.uicontroller.VisualAngleMode.MODE_MEDIUM_SIGHT import java.util.concurrent.TimeUnit /** * 道路事件 */ -class RoadEvent(private val delayTime: Long, private val unit: TimeUnit): Scene { +class RoadEvent(delayTime: Long, unit: TimeUnit): Scene(delayTime, unit) { - override val angle: VisualAngleMode = CallerMapUIServiceManager.getMapUIController()?.getVrAngleDefaultMode() ?: MODE_MEDIUM_SIGHT - - override val priority: Int = 0 - - override val displayThreshold: Long - get() = -1 - - override val delay: Long - get() = unit.toMillis(delayTime) - - override fun toString(): String { - return "RoadEvent(priority=${priority}, displayThreshold: ${displayThreshold}, priority=${priority}" + override fun getVisualAngleMode(): VisualAngleMode { + if (AppIdentityModeUtils.isB2(FunctionBuildConfig.appIdentityMode)) { + return MAP_STYLE_VR_ERHAI_B2 + } + return CallerMapUIServiceManager.getMapUIController()?.getVrAngleDefaultMode() ?: MODE_MEDIUM_SIGHT } - override val isCanSwitch: Boolean - get() = true - - override val isCanTouch: Boolean - get() = true + override fun toString(): String { + return "RoadEvent(mode: ${getVisualAngleMode()}, priority=${getPriority()}, displayThreshold: ${getDisplayThreshold()}," + } } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/angle/scenes/Roma.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/angle/scenes/Roma.kt index fa15d5108e..640d5bf2eb 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/angle/scenes/Roma.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/angle/scenes/Roma.kt @@ -8,18 +8,21 @@ import java.util.concurrent.TimeUnit /** * 漫游场景 */ -class Roma(val delayTime: Long = 2, val unit: TimeUnit = TimeUnit.SECONDS): Scene { +class Roma(val delayTime: Long = 2, val unit: TimeUnit = TimeUnit.SECONDS): Scene(delayTime, unit) { - override val angle: VisualAngleMode - get() = MAP_STYLE_VR_ROMA - override val priority: Int - get() = 1 - override val displayThreshold: Long - get() = -1 - override val delay: Long - get() = unit.toMillis(delayTime) - override val isCanSwitch: Boolean - get() = false - override val isCanTouch: Boolean - get() = false + override fun getVisualAngleMode(): VisualAngleMode { + return MAP_STYLE_VR_ROMA + } + + override fun isCanTouch(): Boolean { + return false + } + + override fun isCanSwitch(): Boolean { + return false + } + + override fun getPriority(): Int { + return 1 + } } \ No newline at end of file diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/map/angle/Scenes.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/map/angle/Scenes.kt index 0e616f316f..0221013516 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/map/angle/Scenes.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/map/angle/Scenes.kt @@ -2,23 +2,62 @@ package com.mogo.eagle.core.function.api.map.angle import com.mogo.eagle.core.function.api.map.angle.ScreenToOriginDis.DEFAULT import com.mogo.map.uicontroller.* - -interface IAttach { - val angle: VisualAngleMode - val priority: Int - val displayThreshold: Long //最大展示时长 > 0; 表示最长展示多长时间, -1 表示,一直展示,直到触发默认视角, 0: 默认视角专用值, - val delay: Long // 延迟多长时间切换 - val isCanSwitch: Boolean // 是否可切换 - val isCanTouch: Boolean // 是否响应地图触摸事件 - - fun getScreenToOriginDis(): ScreenToOriginDis = DEFAULT -} +import java.util.concurrent.TimeUnit enum class ScreenToOriginDis { - DEFAULT, - UP, - DOWN + NONE, + DEFAULT, + UP, + DOWN } -interface Scene: IAttach +abstract class Scene(private val delay: Long, private val unit: TimeUnit = TimeUnit.SECONDS) { + + /** + * 获取当前视角场景的视角类型,此返回值要与地图支持的视角类型匹配 + */ + abstract fun getVisualAngleMode(): VisualAngleMode + + /** + * 当前视角场景的优先级,优先级越高,表示可以打断优先级低的视角场景 + */ + open fun getPriority(): Int = 0 + + /** + * 单位:(毫秒) + * 表示多长时间之后切换到当前视角场景 + */ + final fun getDelay(): Long = unit.toMillis(delay) + + /** + * 单位:(毫秒) + * 最大展示时长 > 0; 表示最长展示多长时间, -1 表示,一直展示,直到触发默认视角, 0: 默认视角专用值, + * @return + * 大于0: 此场景对应的视角展示指定时长后,自动切换到默认视角场景 + * 小于0: 一直展示此场景的视角,直到比此场景优先级:[getPriority]更高的场景触发时,才会终止 + */ + open fun getDisplayThreshold(): Long = 0 + + /** + * 用于业务层视角切换按钮的使能状态 + * @return true: 可以切换; false:不可以切换 + */ + open fun isCanSwitch(): Boolean = true + + /** + * 用于控制高精地图控件(MapAutoView)是否禁掉所有手势 + * @return true: 响应地图控件的触摸事件及手势;false:不响应地图控件的触摸事件及手势 + */ + open fun isCanTouch(): Boolean = true + + /** + * 返回自车相对于地图控件的位置 + * @return + * 1. [ScreenToOriginDis.NONE]: 不设置 + * 2. [ScreenToOriginDis.DEFAULT]: 默认的位置 + * 3. [ScreenToOriginDis.UP]: 偏上 + * 4. [ScreenToOriginDis.DOWN]: 偏下 + */ + open fun getScreenToOriginDis(): ScreenToOriginDis = DEFAULT +}