[模式拦截、车型名称修改、清扫车路由]
This commit is contained in:
yangyakun
2024-04-11 18:48:03 +08:00
parent 5c624c1943
commit 2080efee38
63 changed files with 885 additions and 404 deletions

View File

@@ -21,7 +21,7 @@ object BusVoiceManager {
}
fun arrivedStationBus(siteNameCN: String?, siteNameKR: String?) {
if (AppIdentityModeUtils.isM2(FunctionBuildConfig.appIdentityMode)) {
if (AppIdentityModeUtils.isB2(FunctionBuildConfig.appIdentityMode)) {
return
}
val context = AbsMogoApplication.getApp()

View File

@@ -20,9 +20,9 @@ class BizMapView @JvmOverloads constructor(
private lateinit var mapBizView: MapBizView
init {
if (AppIdentityModeUtils.isM2(FunctionBuildConfig.appIdentityMode)) {
if (AppIdentityModeUtils.isB2(FunctionBuildConfig.appIdentityMode)) {
LayoutInflater.from(context).inflate(R.layout.bus_m2_bizmap_map, this, true)
}else if(AppIdentityModeUtils.isJL(FunctionBuildConfig.appIdentityMode)){
}else if(AppIdentityModeUtils.isB1(FunctionBuildConfig.appIdentityMode)){
LayoutInflater.from(context).inflate(R.layout.bus_jl_bizmap_map, this, true)
}else{
LayoutInflater.from(context).inflate(R.layout.bus_jl_bizmap_map, this, true)

View File

@@ -16,7 +16,6 @@ import com.mogo.och.bus.passenger.passenger.ui.widget.M2StatusBarView
import com.mogo.och.bus.passenger.ui.BusPStatusBarView
import com.mogo.och.bus.passenger.ui.BusPassengerRouteFragment
import com.mogo.och.common.module.biz.constant.OchCommonConst
import com.mogo.och.common.module.biz.provider.CommonService
import com.mogo.och.common.module.biz.provider.CommonServiceImpl
import com.mogo.och.common.module.wigets.media.MediaPlayerActivity
@@ -33,7 +32,7 @@ class BusPassengerProvider : CommonServiceImpl() {
private lateinit var mPM2Fragment: Fragment
override fun getFragment(): Fragment {
if (AppIdentityModeUtils.isJL(FunctionBuildConfig.appIdentityMode)) {
if (AppIdentityModeUtils.isB1(FunctionBuildConfig.appIdentityMode)) {
MultiDisplayUtils.startActWithSecond(ActivityUtils.getTopActivity(), MediaPlayerActivity::class.java)
}
return mPM2Fragment
@@ -41,9 +40,9 @@ class BusPassengerProvider : CommonServiceImpl() {
override fun getStatusBarView(context: Context): View {
if(statusBarView==null) {
statusBarView = if (AppIdentityModeUtils.isM2(FunctionBuildConfig.appIdentityMode)) {
statusBarView = if (AppIdentityModeUtils.isB2(FunctionBuildConfig.appIdentityMode)) {
M2StatusBarView(context)
} else if (AppIdentityModeUtils.isJL(FunctionBuildConfig.appIdentityMode)) {
} else if (AppIdentityModeUtils.isB1(FunctionBuildConfig.appIdentityMode)) {
BusPStatusBarView(context)
} else{
StatusBarView(context)
@@ -54,9 +53,9 @@ class BusPassengerProvider : CommonServiceImpl() {
override fun init(context: Context) {
CallerLogger.d(SceneConstant.M_TAXI_P + tag, "init")
mPM2Fragment = if (AppIdentityModeUtils.isM2(FunctionBuildConfig.appIdentityMode)) {
mPM2Fragment = if (AppIdentityModeUtils.isB2(FunctionBuildConfig.appIdentityMode)) {
PM2BaseFragment()
} else if (AppIdentityModeUtils.isJL(FunctionBuildConfig.appIdentityMode)) {
} else if (AppIdentityModeUtils.isB1(FunctionBuildConfig.appIdentityMode)) {
BusPassengerRouteFragment()
} else {
BusPassengerRouteFragment()

View File

@@ -40,7 +40,7 @@ import com.mogo.och.common.module.biz.common.socketmessage.OCHSocketMessageManag
import com.mogo.och.common.module.biz.login.LoginStatusManager
import com.mogo.och.common.module.biz.constant.OchCommonConst
import com.mogo.och.common.module.biz.login.ILoginCallback
import com.mogo.och.common.module.biz.login.TaxiLoginStatusEnum
import com.mogo.och.common.module.biz.login.LoginStatusEnum
import com.mogo.och.common.module.biz.network.OchCommonServiceCallback
import com.mogo.och.common.module.manager.CharterSendTripInfoManager
import com.mogo.och.common.module.manager.CharterSendTripInfoManager.LEAVE_STATION
@@ -164,7 +164,7 @@ object CharterPassengerModel {
*/
private fun listenerLoginStatus() {
LoginStatusManager.addListener(TAG,object : ILoginCallback{
override fun onStatusChange(currentStatus: TaxiLoginStatusEnum?) {
override fun onStatusChange(currentStatus: LoginStatusEnum?) {
if (LoginStatusManager.isLogin()) {
// 1、打开视频播放、
// 2 、打开空调暖风机灯设置页面

View File

@@ -7,15 +7,18 @@ import com.alibaba.android.arouter.facade.annotation.Route
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.och.biz.login.callback.ILoginViewCallback
import com.mogo.och.biz.login.callback.ITaxiLoginCallback
import com.mogo.och.biz.login.model.LoginStatusDefaultModel
import com.mogo.och.biz.login.ui.LoginFragment
import com.mogo.och.biz.login.ui.LoginPassengerFragment
import com.mogo.och.common.module.biz.constant.OchCommonConst
import com.mogo.och.common.module.biz.login.BusinessEnum
import com.mogo.och.common.module.biz.login.LoginInfo
import com.mogo.och.common.module.biz.login.LoginService
import com.mogo.och.common.module.biz.login.LoginStatusManager
import com.mogo.och.common.module.biz.login.TaxiDriverRoleEnum
import com.mogo.och.common.module.biz.login.TaxiLoginStatusEnum
import com.mogo.och.common.module.biz.login.RoleEnum
import com.mogo.och.common.module.biz.login.LoginStatusEnum
/**
* 网约车小巴业务实现入口
@@ -27,7 +30,8 @@ class LoginProvider : LoginService {
private val tag = LoginProvider::class.java.simpleName
private lateinit var loginFragment: Fragment
private var loginStatus: TaxiLoginStatusEnum = TaxiLoginStatusEnum.None
private var loginStatus: LoginStatusEnum = LoginStatusEnum.None
private var businessEnum: BusinessEnum = BusinessEnum.None
private var loginInfo: LoginInfo?=null
override fun init(context: Context) {
@@ -54,13 +58,13 @@ class LoginProvider : LoginService {
CallerLogger.d(tag,"setLoginStatus:${status}")
when (status) {
0 -> {
setLoginStatus(TaxiLoginStatusEnum.Logout)
setLoginStatus(LoginStatusEnum.Logout)
}
1 -> {
setLoginStatus(TaxiLoginStatusEnum.Login)
setLoginStatus(LoginStatusEnum.Login)
}
else -> {
setLoginStatus(TaxiLoginStatusEnum.None)
setLoginStatus(LoginStatusEnum.None)
}
}
}
@@ -75,6 +79,42 @@ class LoginProvider : LoginService {
LoginStatusDefaultModel.logout(mLatitude, mLongitude)
}
override fun checkBusiness(data: LoginInfo): Boolean {
val businessEnum = BusinessEnum.valueOf(data.businessType)
FunctionBuildConfig.supportBusiness.forEach {
when (it) {
"shuttle" -> {
return checkBusiness(businessEnum==BusinessEnum.Shuttle)
}
"bus" -> {
return checkBusiness(businessEnum==BusinessEnum.Bus)
}
"taxi" -> {
return checkBusiness(businessEnum==BusinessEnum.Taxi)
}
"charter" -> {
return checkBusiness(businessEnum==BusinessEnum.Charter)
}
else -> {}
}
}
if(loginFragment is ILoginViewCallback){
(loginFragment as ILoginViewCallback).showErrorInfo("业务模式不支持")
}
return false
}
private fun checkBusiness(isSupply:Boolean):Boolean{
return if(isSupply){
true
}else{
if(loginFragment is ILoginViewCallback){
(loginFragment as ILoginViewCallback).showErrorInfo("业务模式不支持")
}
false
}
}
override fun setLoginInfo(loginInfo: LoginInfo) {
CallerLogger.d(tag,"setLoginInfo:${loginInfo}")
this.loginInfo = loginInfo
@@ -85,28 +125,43 @@ class LoginProvider : LoginService {
return loginInfo
}
override fun getPurpose(): TaxiDriverRoleEnum {
override fun getPurpose(): RoleEnum {
CallerLogger.d(tag,"getPurpose")
return TaxiDriverRoleEnum.valueOf(loginInfo?.purpose)
return RoleEnum.valueOf(loginInfo?.purpose)
}
override fun isLogin(): Boolean {
CallerLogger.d(tag,"isLogin")
return loginStatus == TaxiLoginStatusEnum.Login
CallerLogger.d(tag,"isLogin:${loginStatus == LoginStatusEnum.Login}")
return loginStatus == LoginStatusEnum.Login
}
override fun getLoginStatus(): TaxiLoginStatusEnum {
override fun getLoginStatus(): LoginStatusEnum {
CallerLogger.d(tag,"getLoginStatus:${loginStatus}")
return loginStatus
}
override fun setLoginStatus(loginStatus: TaxiLoginStatusEnum) {
CallerLogger.d(tag,"setLoginStatus:${loginStatus}")
override fun setLoginStatus(loginStatus: LoginStatusEnum) {
CallerLogger.d(tag,"setLoginStatus:${loginStatus}----old${this.loginStatus}")
if(loginStatus!=this.loginStatus){
this.loginStatus = loginStatus
LoginStatusManager.invokeLoginStatusChange(loginStatus)
}
}
override fun setBusinessType(type: Int) {
CallerLogger.d(tag,"setBusinessType:${type}")
if (businessEnum.code!=type) {
this.businessEnum = BusinessEnum.valueOf(type)
LoginStatusManager.invokeLBusinessTypeChange(this.businessEnum)
}
}
override fun getBusinessType(): BusinessEnum {
CallerLogger.d(tag,"getBusinessType")
return businessEnum
}
}

View File

@@ -11,4 +11,10 @@ import com.mogo.och.common.module.biz.login.LoginInfo;
public class DriverStatusQueryRespBean extends BaseData {
public LoginInfo data;
@Override
public String toString() {
return "DriverStatusQueryRespBean{" +
"data=" + data +
'}';
}
}

View File

@@ -0,0 +1,5 @@
package com.mogo.och.biz.login.callback
interface ILoginViewCallback {
fun showErrorInfo(errorInfo: String)
}

View File

@@ -7,5 +7,4 @@ package com.mogo.och.biz.login.callback;
*/
public interface ITaxiLoginCallback {
void getPhoneCodeSuccess();
void loginSuccess();
}

View File

@@ -11,8 +11,6 @@ import com.mogo.och.biz.login.bean.TaxiLoginReqBean
import com.mogo.och.biz.login.bean.TaxiLoginRespBean
import com.mogo.och.biz.login.callback.ITaxiLoginCallback
import com.mogo.och.biz.login.net.OchCommonServiceManager
import com.mogo.och.common.module.biz.login.LoginStatusManager
import com.mogo.och.common.module.biz.login.TaxiLoginStatusEnum
import com.mogo.och.common.module.biz.network.OchCommonServiceCallback
import com.mogo.och.common.module.utils.ToastUtilsOch
import com.mogo.och.common.module.wigets.toast.ToastCharterUtils
@@ -98,11 +96,10 @@ object LoginModel {
if (null != data && 0 == data.code) {
// 获取验证码成功
ToastCharterUtils.showToastShort(mContext?.getString(R.string.module_och_taxi_login_login_success))
LoginStatusManager.setLoginStatus(TaxiLoginStatusEnum.Login)
LoginStatusDefaultModel.queryCarStatus()
mContext?.let { c ->
SharedPrefsMgr.getInstance().putString("och_account", phone)
}
iTaxiLoginCallback?.loginSuccess()
} else {
if (data != null) {
ToastCharterUtils.showToastShort(data.code.toString())

View File

@@ -5,12 +5,14 @@ import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAX
import android.content.Context;
import com.mogo.eagle.core.data.BaseData;
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager;
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
import com.mogo.eagle.core.utilcode.util.NetworkUtils;
import com.mogo.och.biz.R;
import com.mogo.och.biz.login.bean.DriverStatusQueryRespBean;
import com.mogo.och.biz.login.bean.TaxiLogoutReqBean;
import com.mogo.och.biz.login.net.OchCommonServiceManager;
import com.mogo.och.common.module.biz.login.LoginStatusEnum;
import com.mogo.och.common.module.biz.login.LoginStatusManager;
import com.mogo.och.common.module.biz.constant.OchCommonConst;
import com.mogo.och.common.module.biz.network.OchCommonServiceCallback;
@@ -52,9 +54,20 @@ public abstract class LoginStatusModel {
@Override
public void onSuccess(DriverStatusQueryRespBean data) {
if (null != data && 0 == data.code) {
// 业务不支持
if (!LoginStatusManager.checkBusiness(data.data)) {
// 后台已登录 去退出登录
if (LoginStatusEnum.valueOf(data.data.driverStatus)==LoginStatusEnum.Login) {
double mLatitude = CallerChassisLocationGCJ02ListenerManager.INSTANCE.getChassisLocationGCJ02().getLatitude();
double mLongitude =CallerChassisLocationGCJ02ListenerManager.INSTANCE.getChassisLocationGCJ02().getLongitude();
LoginStatusManager.loginOut(mLatitude,mLongitude);
return;
}
}
LoginStatusManager.setBusinessType(data.data.businessType);
LoginStatusManager.setLoginStatus(data.data.driverStatus);
LoginStatusManager.setLoginInfo(data.data);
CallerLogger.d(M_TAXI + TAG, "changeCarStatus:" + LoginStatusManager.getLoginStatus());
CallerLogger.d(M_TAXI + TAG, "登录信息:" + data);
loginSuccess(data);
}
}

View File

@@ -10,6 +10,7 @@ import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager
import com.mogo.eagle.core.network.MoGoRetrofitFactory
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.och.biz.login.bean.TaxiLoginRespBean
import com.mogo.och.biz.login.bean.TaxiLoginSmsReqBean
import com.mogo.och.biz.login.bean.TaxiLogoutReqBean
@@ -88,6 +89,7 @@ object OchCommonServiceManager {
location4Login: TaxiLoginReqBean.Location4Login,
callback: OchCommonServiceCallback<TaxiLoginRespBean>?
) {
CallerLogger.d(TAG, "gotoLoginBycode:通过手机验证码登录:${phone}---${code}");
val sn = SharedPrefsMgr.getInstance().sn
if (ProjectUtils.isMogo()) {
ochLoginServiceMogo.gotoLoginBycode(
@@ -113,6 +115,7 @@ object OchCommonServiceManager {
location4Login: TaxiLogoutReqBean.Location4Login?,
callback: OchCommonServiceCallback<BaseData>?
) {
CallerLogger.d(TAG, "logout:登出");
if (ProjectUtils.isMogo()) {
ochLoginServiceMogo.logout(
MoGoAiCloudClientConfig.getInstance().serviceAppId,
@@ -145,6 +148,7 @@ object OchCommonServiceManager {
context: Context,
callback: OchCommonServiceCallback<DriverStatusQueryRespBean>?
) {
CallerLogger.d(TAG, "queryDriverServiceStatus:查询登录状态");
val sn =
if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
SharedPrefsMgr.getInstance().sn

View File

@@ -43,8 +43,4 @@ class LoginPassengerPresenter(view: LoginPassengerFragment?) : Presenter<LoginPa
}
override fun loginSuccess() {
}
}

View File

@@ -87,10 +87,6 @@ class LoginPresenter(view: LoginFragment?) : Presenter<LoginFragment?>(view), IT
})
}
override fun loginSuccess() {
mView?.loginSuccess()
}
fun gotoLogin(phone: String, code: String) {
if(!LoginModel.hasInit()){
initListeners()

View File

@@ -3,6 +3,7 @@ package com.mogo.och.biz.login.ui
import android.graphics.Rect
import android.os.SystemClock
import android.view.*
import android.view.ViewTreeObserver.OnGlobalLayoutListener
import androidx.core.content.ContextCompat
import androidx.core.widget.addTextChangedListener
import com.mogo.commons.mvp.MvpFragment
@@ -12,7 +13,9 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.eagle.core.utilcode.util.ActivityUtils
import com.mogo.eagle.core.utilcode.util.KeyboardUtils
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.mogo.och.biz.R
import com.mogo.och.biz.login.callback.ILoginViewCallback
import com.mogo.och.biz.login.presenter.LoginPresenter
import com.mogo.och.common.module.utils.RxUtils
import kotlinx.android.synthetic.main.biz_login_view.biz_acbtn_login
@@ -22,13 +25,14 @@ import kotlinx.android.synthetic.main.biz_login_view.biz_actv_login_get_code
import kotlinx.android.synthetic.main.biz_login_view.biz_actv_login_show_sn
import kotlinx.android.synthetic.main.biz_login_view.biz_actv_welcome_login_title
import kotlinx.android.synthetic.main.biz_login_view.biz_cl_driver_main
import kotlinx.android.synthetic.main.biz_login_view.eiv_Info
/**
* @author: yangyakun
* @date: 2022/8/15
*/
class LoginFragment : MvpFragment<LoginFragment?, LoginPresenter?>(){
class LoginFragment : MvpFragment<LoginFragment?, LoginPresenter?>(), ILoginViewCallback {
override fun getLayoutId(): Int {
return R.layout.biz_login_view
@@ -65,22 +69,32 @@ class LoginFragment : MvpFragment<LoginFragment?, LoginPresenter?>(){
biz_actv_welcome_login_title.setOnClickListener {
continuousClick()
}
biz_cl_driver_main.viewTreeObserver.addOnGlobalLayoutListener {
val rect = Rect()
biz_cl_driver_main.getWindowVisibleDisplayFrame(rect)
val mainInvisibleHeight = biz_cl_driver_main.rootView.height - rect.bottom
if (mainInvisibleHeight > 100) {
val outLocation = IntArray(2)
biz_acbtn_login.getLocationInWindow(outLocation)
val srollHeight = (outLocation[1] + biz_acbtn_login.height) - rect.bottom
if (srollHeight > 0) {
biz_cl_driver_main.scrollTo(0, srollHeight)
biz_cl_driver_main.viewTreeObserver.addOnGlobalLayoutListener(object :OnGlobalLayoutListener{
override fun onGlobalLayout() {
try {
if (biz_cl_driver_main==null) {
biz_cl_driver_main.viewTreeObserver.removeOnGlobalLayoutListener(this)
}else{
val rect = Rect()
biz_cl_driver_main.getWindowVisibleDisplayFrame(rect)
val mainInvisibleHeight = biz_cl_driver_main.rootView.height - rect.bottom
if (mainInvisibleHeight > 100) {
val outLocation = IntArray(2)
biz_acbtn_login.getLocationInWindow(outLocation)
val srollHeight = (outLocation[1] + biz_acbtn_login.height) - rect.bottom
if (srollHeight > 0) {
biz_cl_driver_main.scrollTo(0, srollHeight)
}
CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "滚动的距离:$srollHeight")
} else {
biz_cl_driver_main.scrollTo(0, 0)
}
}
}catch (e:Exception){
e.printStackTrace()
}
CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "滚动的距离:$srollHeight")
} else {
biz_cl_driver_main.scrollTo(0, 0)
}
}
})
biz_actv_login_get_code.onClick {
mPresenter?.getPhoneCode(biz_ace_login_phone_value.text.toString())
}
@@ -159,8 +173,9 @@ class LoginFragment : MvpFragment<LoginFragment?, LoginPresenter?>(){
}
}
fun loginSuccess() {
override fun showErrorInfo(errorInfo: String) {
ToastUtils.showLong(errorInfo)
eiv_Info.visibility = View.VISIBLE
}
override fun onResume() {

View File

@@ -5,6 +5,7 @@ import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.och.biz.R
import com.mogo.och.biz.login.callback.ILoginViewCallback
import com.mogo.och.biz.login.presenter.LoginPassengerPresenter
import kotlinx.android.synthetic.main.biz_login_passenger_view.biz_cl_passenger_main
@@ -13,7 +14,8 @@ import kotlinx.android.synthetic.main.biz_login_passenger_view.biz_cl_passenger_
* @author: yangyakun
* @date: 2022/8/15
*/
class LoginPassengerFragment : MvpFragment<LoginPassengerFragment?, LoginPassengerPresenter?>(){
class LoginPassengerFragment : MvpFragment<LoginPassengerFragment?, LoginPassengerPresenter?>(),
ILoginViewCallback {
override fun getLayoutId(): Int {
return R.layout.biz_login_passenger_view
@@ -24,7 +26,7 @@ class LoginPassengerFragment : MvpFragment<LoginPassengerFragment?, LoginPasseng
AppIdentityModeUtils.isPassenger((FunctionBuildConfig.appIdentityMode))
) {
biz_cl_passenger_main.setBackgroundResource(R.drawable.biz_login_passenger_1920x1080)
} else if (AppIdentityModeUtils.isM2(FunctionBuildConfig.appIdentityMode) &&
} else if (AppIdentityModeUtils.isB2(FunctionBuildConfig.appIdentityMode) &&
AppIdentityModeUtils.isPassenger((FunctionBuildConfig.appIdentityMode))
) {
biz_cl_passenger_main.setBackgroundResource(R.drawable.biz_login_passenger_1080x1920)
@@ -48,6 +50,10 @@ class LoginPassengerFragment : MvpFragment<LoginPassengerFragment?, LoginPasseng
val TAG = LoginPassengerFragment::class.java.simpleName
}
override fun showErrorInfo(errorInfo: String) {
}
override fun onResume() {
super.onResume()
CallerLogger.d(TAG,"onResume")

View File

@@ -0,0 +1,67 @@
package com.mogo.och.biz.login.ui.errorview
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.findViewTreeViewModelStoreOwner
import com.mogo.och.biz.R
import kotlinx.android.synthetic.main.biz_login_errorinfo_view.view.actv_countdown
class ErrorInfoView : ConstraintLayout, ErrorInfoViewModel.IErrorInfoViewCallback {
private val TAG = "ItineraryView"
constructor(context: Context) : super(context)
constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet)
constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int) : super(context, attributeSet, defStyleAttr)
constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(context, attributeSet, defStyleAttr, defStyleRes)
private var viewModel: ErrorInfoViewModel? = null
private fun initView() {
LayoutInflater.from(context).inflate(R.layout.biz_login_errorinfo_view, this, true)
}
override fun onAttachedToWindow() {
super.onAttachedToWindow()
viewModel = findViewTreeViewModelStoreOwner()?.let {
ViewModelProvider(it).get(ErrorInfoViewModel::class.java)
}
viewModel?.setDistanceCallback(this)
}
override fun onVisibilityAggregated(isVisible: Boolean) {
super.onVisibilityAggregated(isVisible)
if(isVisible){
viewModel?.showCountDown()
}else{
}
}
init {
try {
initView()
} catch (e: Exception) {
e.printStackTrace()
}
}
override fun setCountDownText(countDown: String, isEnd: Boolean) {
if(isEnd){
visibility = GONE
}else{
actv_countdown.text = countDown
}
}
}

View File

@@ -0,0 +1,66 @@
package com.mogo.och.biz.login.ui.errorview
import androidx.lifecycle.ViewModel
import com.mogo.commons.AbsMogoApplication
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.och.biz.R
import com.mogo.och.common.module.utils.RxUtils
import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
import io.reactivex.schedulers.Schedulers
import java.util.concurrent.TimeUnit
class ErrorInfoViewModel : ViewModel() {
private val TAG = ErrorInfoViewModel::class.java.simpleName
private var viewCallback: IErrorInfoViewCallback? = null
private var countDownDisposable: Disposable? = null
init {
}
fun setDistanceCallback(viewCallback: IErrorInfoViewCallback) {
this.viewCallback = viewCallback
}
fun showCountDown(){
val countDownSeconds = 10L
if(RxUtils.isNotDisposed(countDownDisposable)){
return
}
countDownDisposable = Observable.intervalRange(0, countDownSeconds, 0, 1, TimeUnit.SECONDS)
.map { aLong -> countDownSeconds - aLong }
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
viewCallback?.setCountDownText("${it}s",false)
CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "倒计时:$it")
}, {
CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "倒计时onError:${it}")
it.printStackTrace()
viewCallback?.setCountDownText(AbsMogoApplication.getApp().getString(R.string.module_och_taxi_login_get_code),true)
}, {
CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "倒计时onComplete")
viewCallback?.setCountDownText(AbsMogoApplication.getApp().getString(R.string.module_och_taxi_login_get_code),true)
})
}
override fun onCleared() {
super.onCleared()
this.viewCallback = null
}
interface IErrorInfoViewCallback {
fun setCountDownText(s: String, b: Boolean)
}
}

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/biz_login_5F6582"/>
<corners android:radius="46dp"/>
</shape>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/biz_login_A0B3DA"/>
<corners android:radius="@dimen/dp_80"/>
</shape>

View File

@@ -0,0 +1,65 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="@dimen/dp_939"
android:layout_height="@dimen/dp_710"
android:background="@drawable/biz_login_error_info">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/actv_countdown"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_35"
android:layout_marginEnd="@dimen/dp_45"
android:textColor="@color/biz_login_72A7FF"
android:textSize="@dimen/dp_40"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="10s" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/actv_error_head"
android:layout_width="@dimen/dp_818"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_120"
android:gravity="center"
android:textColor="@android:color/white"
android:textSize="@dimen/dp_46"
app:layout_constraintBottom_toTopOf="@+id/actv_error_body"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="当前Apk为包车模式配置为接驳模式请检查应用或配置" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/actv_error_body"
android:layout_width="@dimen/dp_818"
android:layout_height="0dp"
android:gravity="center"
android:textColor="@android:color/white"
android:textSize="@dimen/dp_40"
app:layout_constraintBottom_toTopOf="@+id/actv_see"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.495"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/actv_error_head"
tools:text="T1 passanger-Saas Online-5.4.1001 AppSN12342392349 司机SN0383423942739" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/actv_see"
android:layout_width="@dimen/dp_350"
android:layout_height="@dimen/dp_130"
android:layout_marginBottom="@dimen/dp_80"
android:background="@drawable/biz_login_error_see"
android:gravity="center"
android:text="@string/biz_log_i_see"
android:textColor="@android:color/white"
android:textSize="@dimen/dp_46"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/actv_error_body" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -128,5 +128,15 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<com.mogo.och.biz.login.ui.errorview.ErrorInfoView
android:id="@+id/eiv_Info"
android:visibility="gone"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginBottom="@dimen/dp_414"
android:layout_width="@dimen/dp_939"
android:layout_height="@dimen/dp_710"/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="biz_login_5F6582">#5F6582</color>
<color name="biz_login_72A7FF">#72A7FF</color>
<color name="biz_login_A0B3DA">#A0B3DA</color>
</resources>

View File

@@ -17,4 +17,6 @@
<string name="qr_cancel">取消</string>
<string name="bind_driver_qr_title">扫描二维码完成车辆绑定</string>
<string name="biz_log_i_see">我知道了</string>
</resources>

View File

@@ -14,5 +14,7 @@ enum class DPMsgType(val type: Int) {
TYPE_ARRIVEDEST_STATUS(6), //到站通知 status
TYPE_ORDER_CLOSED_BY_M1_STATUS(7), //到站通知 status
TYPE_WRITEOFF_INFO(8), //核销信息
TYPE_WRITEOFF_DEVICES_INFO(9) //核销设备信息
TYPE_WRITEOFF_DEVICES_INFO(9), //核销设备信息
TYPE_CHANGE_BUSINESS_TYPE(10), //业务模式切换
TYPE_ENV_CHECK(11) //环境核验
}

View File

@@ -8,14 +8,16 @@ package com.mogo.och.common.module.biz.login
* 10 已登录,
* 20 已登出,
*/
enum class TaxiLoginStatusEnum(val code: Int) {
enum class BusinessEnum(val code: Int) {
None( 0 ),
Login( 10),
Logout( 20),;
Taxi( 9),
Bus( 10),
Shuttle( 11),
Charter( 13),;
companion object {
@JvmStatic
fun valueOf(code: Int): TaxiLoginStatusEnum? {
fun valueOf(code: Int): BusinessEnum {
for (value in values()) {
if (value.code == code) {
return value

View File

@@ -5,6 +5,8 @@ public interface ILoginCallback {
default void loginFail(){}
default void onStatusChange(TaxiLoginStatusEnum currentStatus){}
default void onStatusChange(LoginStatusEnum currentStatus){}
default void onBusinessChange(BusinessEnum businessEnum){}
}

View File

@@ -2,6 +2,7 @@ package com.mogo.och.common.module.biz.login;
public class LoginInfo {
public int driverStatus; //1登录0登出
public int businessType; //9: taxi. 10: bus公交 11:接驳 13:包车
public String orderNo;
public int purpose; // 1 运营, 2 测试, 3演示
public String sn;

View File

@@ -6,12 +6,15 @@ interface LoginService :CommonService {
fun setLoginInfo(loginInfo: LoginInfo)
fun getLoginInfo():LoginInfo?
fun getPurpose():TaxiDriverRoleEnum
fun getPurpose():RoleEnum
fun isLogin():Boolean
fun getLoginStatus(): TaxiLoginStatusEnum
fun setLoginStatus(loginStatus: TaxiLoginStatusEnum)
fun getLoginStatus(): LoginStatusEnum
fun setLoginStatus(loginStatus: LoginStatusEnum)
fun setLoginStatus(status: Int)
fun setBusinessType(type: Int)
fun getBusinessType():BusinessEnum
fun queryLoginStatusByNet()
@@ -19,5 +22,6 @@ interface LoginService :CommonService {
* 登出
*/
fun loginOut(mLatitude:Double,mLongitude:Double)
fun checkBusiness(data: LoginInfo): Boolean
}

View File

@@ -0,0 +1,27 @@
package com.mogo.och.common.module.biz.login
/**
* Created on 2022/08/19
*
*
* 0 初始状态,
* 10 已登录,
* 20 已登出,
*/
enum class LoginStatusEnum(val code: Int) {
None( -1 ),
Login( 1),
Logout( 0),;
companion object {
@JvmStatic
fun valueOf(code: Int): LoginStatusEnum? {
for (value in values()) {
if (value.code == code) {
return value
}
}
return None
}
}
}

View File

@@ -3,10 +3,8 @@ package com.mogo.och.common.module.biz.login
import androidx.fragment.app.Fragment
import com.alibaba.android.arouter.launcher.ARouter
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotStatisticsListenerManager
import com.mogo.och.common.module.biz.constant.OchCommonConst
import com.mogo.och.common.module.utils.CallerBase
import java.util.concurrent.ConcurrentHashMap
object LoginStatusManager : CallerBase<ILoginCallback>() {
@@ -31,11 +29,11 @@ object LoginStatusManager : CallerBase<ILoginCallback>() {
loginService?.queryLoginStatusByNet()
}
@JvmStatic
fun getPurpose(): TaxiDriverRoleEnum {
fun getPurpose(): RoleEnum {
loginService?.let {
return it.getPurpose()
}
return TaxiDriverRoleEnum.None
return RoleEnum.None
}
@JvmStatic
@@ -51,18 +49,29 @@ object LoginStatusManager : CallerBase<ILoginCallback>() {
fun setLoginStatus(status: Int) {
loginService?.setLoginStatus(status)
}
@JvmStatic
fun setBusinessType(type: Int) {
loginService?.setBusinessType(type)
}
fun getBusInessType():BusinessEnum{
loginService?.let {
return it.getBusinessType()
}
return BusinessEnum.None
}
@JvmStatic
fun setLoginStatus(loginStatus: TaxiLoginStatusEnum) {
fun setLoginStatus(loginStatus: LoginStatusEnum) {
loginService?.setLoginStatus(loginStatus)
}
@JvmStatic
fun getLoginStatus(): TaxiLoginStatusEnum {
fun getLoginStatus(): LoginStatusEnum {
loginService?.let {
return it.getLoginStatus()
}
return TaxiLoginStatusEnum.None
return LoginStatusEnum.None
}
@JvmStatic
@@ -73,11 +82,27 @@ object LoginStatusManager : CallerBase<ILoginCallback>() {
return false
}
fun invokeLoginStatusChange(currentStatus: TaxiLoginStatusEnum) {
fun invokeLoginStatusChange(currentStatus: LoginStatusEnum) {
M_LISTENERS.forEach {
val listener = it.value
listener.onStatusChange(currentStatus)
}
}
fun invokeLBusinessTypeChange(currentStatus: BusinessEnum) {
M_LISTENERS.forEach {
val listener = it.value
listener.onBusinessChange(currentStatus)
}
}
@JvmStatic
fun checkBusiness(data: LoginInfo):Boolean {
loginService?.let {
return it.checkBusiness(data)
}
return false
}
}

View File

@@ -4,7 +4,7 @@ package com.mogo.och.common.module.biz.login
* Created on 2021/12/7
* 1 运营, 2 测试, 3演示
*/
enum class TaxiDriverRoleEnum(val code: Int) {
enum class RoleEnum(val code: Int) {
None( 0),
OPERATION( 1),
TEST( 2),
@@ -13,13 +13,13 @@ enum class TaxiDriverRoleEnum(val code: Int) {
companion object {
@JvmStatic
fun valueOf(code: Int?): TaxiDriverRoleEnum {
for (value in TaxiDriverRoleEnum.values()) {
fun valueOf(code: Int?): RoleEnum {
for (value in RoleEnum.values()) {
if (value.code == code) {
return value
}
}
return TaxiDriverRoleEnum.None
return RoleEnum.None
}
}
}

View File

@@ -4,6 +4,7 @@ import com.mogo.eagle.core.data.BaseData
import com.mogo.eagle.core.network.RequestOptions
import com.mogo.eagle.core.network.SubscribeImpl
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.och.common.module.manager.orderlogmanager.OchChainLogManager
import com.mogo.och.common.module.utils.CallerLoggerUtils.flavorTag
class OchCommonSubscribeImpl<T : BaseData>(
@@ -16,21 +17,29 @@ class OchCommonSubscribeImpl<T : BaseData>(
const val TAG = "OchCommonSubscribeImpl"
}
init {
CallerLogger.e("$flavorTag$TAG", "$apiName: 去请求()")
OchChainLogManager.writeChainLogNet("接口:${apiName}","去请求")
}
override fun onSuccess(o: T) {
super.onSuccess(o)
CallerLogger.d("$flavorTag$TAG", "$apiName: onSuccess() ${o.msg}")
OchChainLogManager.writeChainLogNet("接口:${apiName}","请求成功:${o}")
callback?.onSuccess(o)
}
override fun onError(e: Throwable) {
super.onError(e)
CallerLogger.e("$flavorTag$TAG", "$apiName: onError() ${e.message}")
OchChainLogManager.writeChainLogNet("接口:${apiName}","请求失败:${e.message}")
callback?.onError("$apiName: onError() ${e.message}")
}
override fun onError(message: String, code: Int) {
super.onError(message, code)
CallerLogger.e("$flavorTag$TAG", "$apiName: onError() code = $code; message = $message")
OchChainLogManager.writeChainLogNet("接口:${apiName}","请求失败: onError() code = $code; message = $message\"")
callback?.onFail(code, message)
}
}

View File

@@ -3,7 +3,7 @@ package com.mogo.och.common.module.biz.network.interceptor
import com.mogo.cloud.passport.MoGoAiCloudClient
import com.mogo.eagle.core.data.BaseData
import com.mogo.och.common.module.biz.login.LoginStatusManager
import com.mogo.och.common.module.biz.login.TaxiLoginStatusEnum
import com.mogo.och.common.module.biz.login.LoginStatusEnum
import io.reactivex.Observable
import io.reactivex.ObservableSource
import io.reactivex.functions.Function
@@ -16,7 +16,7 @@ class FRetryWithTime<T : BaseData> : Function<T, ObservableSource<T>> {
MoGoAiCloudClient.getInstance().refreshToken()
return Observable.error(OchCommonRetryException())
}else if(it.code == 1003){
LoginStatusManager.setLoginStatus(TaxiLoginStatusEnum.Logout)
LoginStatusManager.setLoginStatus(LoginStatusEnum.Logout)
}
}
return Observable.just(baseData)

View File

@@ -11,4 +11,6 @@ interface CommonService : IProvider {
fun getStatusBarView(context: Context): View
fun invokeByName(type:String,value:Any){}
}

View File

@@ -22,6 +22,13 @@ object OchChainLogManager {
// 需要举行观察的
const val EVENT_KEY_INFE_ERROR = "event_key_och_error"
const val EVENT_KEY_INFO_Net = "event_key_och_net"
fun writeChainLogNet(info: String, changeInfo: String){
writeChainLog(info,changeInfo,true,EVENT_KEY_INFO_Net)
}
/**
* @param Info 订单详细信息
* @param changeInfo 变化信息

View File

@@ -5,33 +5,40 @@ project.dependencies {
} else {
if (isCurrentDriver("C1")) {
println "och.gradle---Driver---C1"
implementation project.project(':OCH:sweeper:driver')
} else if (isCurrentDriver("B1")) {
println "och.gradle---Driver---B1"
implementation project.project(':OCH:shuttle:driver')
implementation project.project(':OCH:bus:driver')
} else if (isCurrentPassenger("B1")) {
println "och.gradle---Passenger---B1"
implementation project.project(':OCH:bus:passenger')
implementation project.project(':OCH:shuttle:passenger')
} else if (isCurrentDriver("M1")) {
println "utils.gradle------isDriverM1"
println "och.gradle---Driver---M1"
implementation project.project(':OCH:charter:driver')
} else if (isCurrentPassenger("M1")) {
println "och.gradle---Passenger---M1"
implementation project.project(':OCH:charter:passenger')
println "utils.gradle------isPassengerM1"
} else if (isCurrentDriver("B2")) {
println "och.gradle---Driver---B2"
implementation project.project(':OCH:shuttle:driver')
implementation project.project(':OCH:bus:driver')
} else if (isCurrentPassenger("B2")) {
println "och.gradle---Passenger---B2"
implementation project.project(':OCH:bus:passenger')
implementation project.project(':OCH:shuttle:passenger')
} else if (isCurrentDriver("ochT1T2")) {
} else if (isCurrentDriver("T1T2")) {
println "och.gradle---Driver---T1T2"
if(isCurrentDriver("saas")){
implementation project.project(':OCH:taxi:unmanned-driver')
}
if(isCurrentDriver("mogo")){
implementation project.project(':OCH:taxi:driver')
}
} else if (isCurrentPassenger("ochT1T2")) {
} else if (isCurrentPassenger("T1T2")) {
println "och.gradle---Passenger---T1T2"
if(isCurrentDriver("saas")){
implementation project.project(':OCH:taxi:unmanned-passenger')
}

View File

@@ -1,28 +1,12 @@
package com.mogo.och.facade.route
import android.content.Context
import android.view.Gravity
import android.view.View
import android.view.ViewGroup
import android.widget.FrameLayout
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
import androidx.fragment.app.FragmentManager
import com.alibaba.android.arouter.facade.annotation.Route
import com.alibaba.android.arouter.launcher.ARouter
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.function.api.base.IMoGoFunctionProvider
import com.mogo.eagle.core.function.hmi.ui.widget.StatusBarView
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.och.common.module.biz.constant.OchCommonConst
import com.mogo.och.common.module.biz.login.ILoginCallback
import com.mogo.och.common.module.biz.login.LoginStatusManager
import com.mogo.och.common.module.biz.login.LoginStatusManager.queryLoginStatusByNet
import com.mogo.och.common.module.biz.login.TaxiLoginStatusEnum
import com.mogo.och.common.module.biz.provider.CommonService
import com.mogo.och.common.module.manager.orderlogmanager.OchChainLogManager
import com.mogo.och.common.module.biz.login.LoginStatusEnum
import com.mogo.och.facade.constant.FacadeConst
/**
@@ -34,7 +18,34 @@ import com.mogo.och.facade.constant.FacadeConst
class FacadeDriverProvider : FacadeProvider() {
private val TAG = "FacadeDriverProvider"
private val sweeperFacadeProvider:SweeperFacadeProvider by lazy {
SweeperFacadeProvider()
}
override val functionName: String
get() = TAG
override fun init(context: Context) {
if (AppIdentityModeUtils.isC1(FunctionBuildConfig.appIdentityMode)) {
sweeperFacadeProvider.init(context)
}else {
super.init(context)
}
}
override fun createCoverage(fragmentActivity: FragmentActivity?, integer: Int?): Fragment? {
if (AppIdentityModeUtils.isC1(FunctionBuildConfig.appIdentityMode)) {
return sweeperFacadeProvider.createCoverage(fragmentActivity,integer)
}else {
return super.createCoverage(fragmentActivity, integer)
}
}
override fun onDestroy() {
super.onDestroy()
}
override fun onStatusChange(currentStatus: LoginStatusEnum) {
super.onStatusChange(currentStatus)
}
}

View File

@@ -11,17 +11,22 @@ import androidx.fragment.app.FragmentManager
import com.alibaba.android.arouter.launcher.ARouter
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.function.api.base.IMoGoFunctionProvider
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager
import com.mogo.eagle.core.function.hmi.ui.setting.SopView
import com.mogo.eagle.core.function.hmi.ui.setting.ToggleDebugView
import com.mogo.eagle.core.function.hmi.ui.widget.StatusBarView
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
import com.mogo.och.common.module.biz.constant.OchCommonConst
import com.mogo.och.common.module.biz.login.BusinessEnum
import com.mogo.och.common.module.biz.login.ILoginCallback
import com.mogo.och.common.module.biz.login.LoginStatusManager
import com.mogo.och.common.module.biz.login.LoginStatusManager.queryLoginStatusByNet
import com.mogo.och.common.module.biz.login.TaxiLoginStatusEnum
import com.mogo.och.common.module.biz.login.LoginStatusEnum
import com.mogo.och.common.module.biz.provider.CommonService
import com.mogo.och.common.module.manager.orderlogmanager.OchChainLogManager
import com.mogo.och.common.module.utils.ProjectUtils
import org.greenrobot.eventbus.EventBus
/**
* 网约车小巴业务实现入口
@@ -48,10 +53,12 @@ abstract class FacadeProvider : IMoGoFunctionProvider, ILoginCallback {
private fun showFragment() {
val supportFragmentManager: FragmentManager? = activity?.supportFragmentManager
val fragment = if (LoginStatusManager.isLogin()) {
getFragment()
} else {
CallerHmiManager.hideToolsView()
ToggleDebugView.toggleDebugView.dismiss()
SopView.sopView.dismiss()
LoginStatusManager.getFragment()
}
@@ -123,11 +130,23 @@ abstract class FacadeProvider : IMoGoFunctionProvider, ILoginCallback {
activity!!.finish()
}
override fun onStatusChange(currentStatus: TaxiLoginStatusEnum) {
override fun onStatusChange(currentStatus: LoginStatusEnum) {
d(TAG, "登录状态发生改变 ${currentStatus}")
showFragment()
}
override fun onBusinessChange(businessEnum: BusinessEnum) {
super.onBusinessChange(businessEnum)
val (bussness, identity, model) =AppIdentityModeUtils.getInfo(FunctionBuildConfig.appIdentityMode)
when (businessEnum) {
BusinessEnum.None -> {}
BusinessEnum.Taxi -> FunctionBuildConfig.appIdentityMode = "${AppIdentityModeUtils.TAXI}_${identity}_${model}"
BusinessEnum.Bus -> FunctionBuildConfig.appIdentityMode = "${AppIdentityModeUtils.BUS}_${identity}_${model}"
BusinessEnum.Shuttle -> FunctionBuildConfig.appIdentityMode = "${AppIdentityModeUtils.SHUTTLE}_${identity}_${model}"
BusinessEnum.Charter -> FunctionBuildConfig.appIdentityMode = "${AppIdentityModeUtils.CHARTER}_${identity}_${model}"
}
}
private fun injectStatusBar() {
activity?.let {

View File

@@ -0,0 +1,73 @@
package com.mogo.och.facade.route
import android.content.Context
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
import androidx.fragment.app.FragmentManager
import com.alibaba.android.arouter.launcher.ARouter
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.function.api.base.IMoGoFunctionProvider
import com.mogo.eagle.core.function.api.vehicle.IMoGoSweeperModeListener
import com.mogo.eagle.core.function.call.vehicle.CallerSweeperModeListenerManager
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
import com.mogo.och.common.module.biz.constant.OchCommonConst
import com.mogo.och.common.module.biz.provider.CommonService
/**
* 网约车小巴业务实现入口
*
* @author tongchenfei
*/
class SweeperFacadeProvider : IMoGoFunctionProvider, IMoGoSweeperModeListener {
private var containerId = 0
private var activity: FragmentActivity? = null
private val TAG = "SweeperFacadeProvider"
private var commonService: CommonService? = null
override val functionName: String
get() = TAG
override fun init(context: Context) {
d(TAG, "SweeperFacadeProvider:init")
CallerSweeperModeListenerManager.addListener(TAG, this)
}
override fun createCoverage(fragmentActivity: FragmentActivity?, integer: Int?): Fragment? {
containerId = integer!!
activity = fragmentActivity
showFragment()
return null
}
private fun showFragment() {
val supportFragmentManager: FragmentManager? = activity?.supportFragmentManager
val (_, identity, model) =AppIdentityModeUtils.getInfo(FunctionBuildConfig.appIdentityMode)
FunctionBuildConfig.appIdentityMode = "${AppIdentityModeUtils.SWEEPER}_${identity}_${model}"
val fragment = getFragmentByServeName(OchCommonConst.SWEEPER_DRIVER)
d(TAG, "切换 fragment:${fragment}")
if (supportFragmentManager != null) {
val back = supportFragmentManager.beginTransaction()
back.replace(containerId, fragment, fragment.tag)
back.commit()
}
}
private fun getFragmentByServeName(serviceName: String): Fragment {
commonService = ARouter.getInstance().build(serviceName).navigation() as CommonService?
return commonService!!.getFragment()
}
override fun onDestroy() {
//若不调用finish, 设置中打开关闭UITouch,会造成och fragment 重叠
if (activity == null) return
activity!!.finish()
}
override fun onSweeperCurrentModeChanged(currentMode: String) {
commonService?.invokeByName("reStart",currentMode)
}
}

View File

@@ -32,7 +32,6 @@ import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager;
import com.mogo.eagle.core.function.hmi.ui.msgbox.DriverMsgBoxBubbleView;
import com.mogo.eagle.core.function.hmi.ui.msgbox.DriverMsgBoxButtonView;
import com.mogo.eagle.core.function.hmi.ui.msgbox.DriverMsgBoxListView;
import com.mogo.eagle.core.function.hmi.ui.widget.TrafficDataView;
import com.mogo.eagle.core.function.smp.view.SmallMapView;
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils;
import com.mogo.eagle.core.utilcode.mogo.view.OnPreventFastClickListener;
@@ -257,10 +256,10 @@ public abstract class BaseShuttleTabFragment<V extends IView, P extends Presente
IMogoMapUIController mapUIController = CallerMapUIServiceManager.INSTANCE.getMapUIController(MogoMap.DEFAULT);
if(mapUIController!=null){
if (AppIdentityModeUtils.isM2(FunctionBuildConfig.appIdentityMode)) {
if (AppIdentityModeUtils.isB2(FunctionBuildConfig.appIdentityMode)) {
mapUIController.changeCurrentIcon(R.raw.m2);
HdMapBuildConfig.currentCarVrIconRes = R.raw.m2;
}else if (AppIdentityModeUtils.isJL(FunctionBuildConfig.appIdentityMode)) {
}else if (AppIdentityModeUtils.isB1(FunctionBuildConfig.appIdentityMode)) {
mapUIController.changeCurrentIcon(R.raw.xiaoba);
HdMapBuildConfig.currentCarVrIconRes = R.raw.xiaoba;
}

View File

@@ -13,7 +13,7 @@ import java.util.ArrayList
object ShuttleVoiceManager {
fun arrivedStationBus(siteNameCN: String?, siteNameKR: String?) {
if (AppIdentityModeUtils.isM2(FunctionBuildConfig.appIdentityMode)) {
if (AppIdentityModeUtils.isB2(FunctionBuildConfig.appIdentityMode)) {
return
}
val context = AbsMogoApplication.getApp()

View File

@@ -24,9 +24,9 @@ class BizMapView @JvmOverloads constructor(
private lateinit var mapBizView: MapBizView
init {
if (AppIdentityModeUtils.isM2(FunctionBuildConfig.appIdentityMode)) {
if (AppIdentityModeUtils.isB2(FunctionBuildConfig.appIdentityMode)) {
LayoutInflater.from(context).inflate(R.layout.shuttle_m2_bizmap_map, this, true)
}else if(AppIdentityModeUtils.isJL(FunctionBuildConfig.appIdentityMode)){
}else if(AppIdentityModeUtils.isB1(FunctionBuildConfig.appIdentityMode)){
LayoutInflater.from(context).inflate(R.layout.shuttle_jl_bizmap_map, this, true)
}else{
LayoutInflater.from(context).inflate(R.layout.shuttle_jl_bizmap_map, this, true)

View File

@@ -1,12 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.mogo.och.shuttle.passenger">
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application>
<activity android:name="com.mogo.eagle.core.function.main.MainLauncherActivity"
android:screenOrientation="portrait"
tools:replace="android:screenOrientation"/>
</application>
</manifest>

View File

@@ -9,7 +9,6 @@ import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
import com.mogo.eagle.core.utilcode.util.ActivityUtils
import com.mogo.eagle.core.utilcode.util.MultiDisplayUtils
import com.mogo.och.common.module.biz.constant.OchCommonConst
import com.mogo.och.common.module.biz.provider.CommonService
import com.mogo.och.common.module.biz.provider.CommonServiceImpl
import com.mogo.och.common.module.wigets.media.MediaPlayerActivity
import com.mogo.och.shuttle.passenger.model.TicketModel
@@ -31,9 +30,9 @@ class ShuttlePassengerProvider : CommonServiceImpl() {
override fun init(context: Context) {
TicketModel.load()
mPM2Fragment = if (AppIdentityModeUtils.isM2(FunctionBuildConfig.appIdentityMode)) {
mPM2Fragment = if (AppIdentityModeUtils.isB2(FunctionBuildConfig.appIdentityMode)) {
PM2BaseFragment()
}else if (AppIdentityModeUtils.isJL(FunctionBuildConfig.appIdentityMode)) {
}else if (AppIdentityModeUtils.isB1(FunctionBuildConfig.appIdentityMode)) {
BusPassengerRouteFragment()
}else{
BusPassengerRouteFragment()
@@ -42,9 +41,9 @@ class ShuttlePassengerProvider : CommonServiceImpl() {
override fun getStatusBarView(context: Context): View {
if(statusBarView==null){
statusBarView = if (AppIdentityModeUtils.isM2(FunctionBuildConfig.appIdentityMode)) {
statusBarView = if (AppIdentityModeUtils.isB2(FunctionBuildConfig.appIdentityMode)) {
M2StatusBarView(context);
} else if (AppIdentityModeUtils.isJL(FunctionBuildConfig.appIdentityMode)) {
} else if (AppIdentityModeUtils.isB1(FunctionBuildConfig.appIdentityMode)) {
BusPStatusBarView(context);
}else{
BusPStatusBarView(context);
@@ -54,7 +53,7 @@ class ShuttlePassengerProvider : CommonServiceImpl() {
}
override fun getFragment(): Fragment {
if (AppIdentityModeUtils.isJL(FunctionBuildConfig.appIdentityMode)) {
if (AppIdentityModeUtils.isB1(FunctionBuildConfig.appIdentityMode)) {
MultiDisplayUtils.startActWithSecond(ActivityUtils.getTopActivity(), MediaPlayerActivity::class.java)
}
return mPM2Fragment

View File

@@ -55,7 +55,7 @@ object TicketModel : StateChangeListener {
override fun onFail(code: Int, msg: String?) {
CallerLogger.d(M_BUS_P + TAG, "核销失败 ${code}-----${msg}")
when (code) {
6002 -> {sendMessage2Driver("同一订单核销间隔时间需大于5分钟")}
6002 -> {sendMessage2Driver("同一订单核销间隔时间需大于2分钟")}
1009 -> {sendMessage2Driver("车票所选乘车日期非今日")}
1005 -> {sendMessage2Driver("车辆未登录、或没有任务")}
1006 -> {sendMessage2Driver("车票路线信息与当前车辆执行任务的路线信息不符合")}
@@ -64,7 +64,7 @@ object TicketModel : StateChangeListener {
1012 -> {sendMessage2Driver("当前用户下单路线非当前的车辆所属公司")}
else -> {
when (msg) {
"6002" -> {sendMessage2Driver("同一订单核销间隔时间需大于5分钟")}
"6002" -> {sendMessage2Driver("同一订单核销间隔时间需大于2分钟")}
"1009" -> {sendMessage2Driver("车票所选乘车日期非今日")}
"1005" -> {sendMessage2Driver("车辆未登录、或没有任务")}
"1006" -> {sendMessage2Driver("车票路线信息与当前车辆执行任务的路线信息不符合")}

View File

@@ -1,6 +1,7 @@
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
android {
compileSdkVersion rootProject.ext.android.compileSdkVersion
@@ -15,9 +16,11 @@ android {
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles "consumer-rules.pro"
javaCompileOptions {
annotationProcessorOptions {
arguments = [AROUTER_MODULE_NAME: project.getName(),"room.schemaLocation": "$projectDir/schemas".toString()]
kapt {
useBuildCache = false
arguments {
arg("AROUTER_MODULE_NAME", project.getName())
arg("room.schemaLocation", "$projectDir/schemas".toString())
}
}
}
@@ -49,7 +52,7 @@ dependencies {
implementation rootProject.ext.dependencies.androidxappcompat
implementation rootProject.ext.dependencies.arouter
testImplementation 'junit:junit:4.12'
annotationProcessor rootProject.ext.dependencies.aroutercompiler
kapt rootProject.ext.dependencies.aroutercompiler
implementation rootProject.ext.dependencies.androidxconstraintlayout
implementation rootProject.ext.dependencies.amapnavi3dmap
@@ -58,7 +61,7 @@ dependencies {
implementation rootProject.ext.dependencies.androidxrecyclerview
implementation rootProject.ext.dependencies.androidxcardview
implementation rootProject.ext.dependencies.androidxroomruntime
annotationProcessor rootProject.ext.dependencies.androidxroomcompiler
kapt rootProject.ext.dependencies.androidxroomcompiler
implementation rootProject.ext.dependencies.localbroadcastmanager
implementation project(":OCH:common:common")

View File

@@ -1,24 +0,0 @@
package com.mogo.och.sweeper;
import androidx.annotation.IdRes;
import androidx.fragment.app.FragmentActivity;
import com.mogo.eagle.core.function.api.base.IMoGoFunctionProvider;
public
/**
* @author congtaowang
* @since 2021/1/15
*
* 网约车抽象接口
*/
interface IMogoOCH extends IMoGoFunctionProvider {
/**
* 初始化网约车容器
*
* @param activity
* @param containerId 容器ID
*/
void createCoverage(FragmentActivity activity, @IdRes int containerId);
}

View File

@@ -1,191 +0,0 @@
package com.mogo.och.sweeper;
import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_SWEEPER;
import android.annotation.SuppressLint;
import android.content.Context;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.mogo.eagle.core.data.config.FunctionBuildConfig;
import com.mogo.eagle.core.function.api.vehicle.IMoGoSweeperModeListener;
import com.mogo.eagle.core.function.call.vehicle.CallerSweeperModeListenerManager;
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
import com.mogo.eagle.core.utilcode.mogo.vehicle.SweeperVehicleConfigUtils;
import com.mogo.eagle.core.utilcode.util.AppUtils;
import com.mogo.eagle.core.utilcode.util.ToastUtils;
import com.mogo.eagle.core.utilcode.util.UiThreadHandler;
import com.mogo.och.common.module.biz.constant.OchCommonConst;
import com.mogo.och.common.module.utils.ToastUtilsOch;
import com.mogo.och.sweeper.cloud.fragment.SweeperCloudFragment;
import com.mogo.och.sweeper.common.constant.SweeperConst;
import com.mogo.och.sweeper.common.database.MyDataBase;
import com.mogo.och.sweeper.common.util.SweeperAnalyticsManager;
import com.mogo.och.sweeper.operate.fragment.SweeperOperateFragment;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import io.reactivex.Observable;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;
/**
* 清扫车业务实现入口
*
* @author tongchenfei
*/
@Route(path = OchCommonConst.SWEEPER_DRIVER)
public class SweeperProvider implements IMogoOCH, IMoGoSweeperModeListener {
private static final String TAG = "SweeperProvider";
private SweeperOperateFragment sweeperOperateFragment;
private SweeperCloudFragment sweeperCloudFragment;
private int containerId;
private FragmentActivity activity;
@Override
public void init(Context context) {
}
private void showOperateFragment() {
FragmentManager supportFragmentManager = activity.getSupportFragmentManager();
if (sweeperOperateFragment == null) {
CallerLogger.d(TAG, "准备add fragment======");
Fragment fragmentByTag = supportFragmentManager.findFragmentByTag(SweeperOperateFragment.TAG);
if (fragmentByTag instanceof SweeperOperateFragment) {
sweeperOperateFragment = (SweeperOperateFragment) fragmentByTag;
} else {
sweeperOperateFragment = new SweeperOperateFragment();
}
if (!sweeperOperateFragment.isAdded()) {
supportFragmentManager.beginTransaction().add(containerId, sweeperOperateFragment, SweeperOperateFragment.TAG).commitAllowingStateLoss();
}
return;
}
CallerLogger.d(TAG, "准备show fragment");
supportFragmentManager.beginTransaction().show(sweeperOperateFragment).commitAllowingStateLoss();
}
private void showCloudFragment() {
FragmentManager supportFragmentManager = activity.getSupportFragmentManager();
if (sweeperCloudFragment == null) {
CallerLogger.d(TAG, "准备add fragment======");
Fragment fragmentByTag = supportFragmentManager.findFragmentByTag(SweeperCloudFragment.TAG);
if (fragmentByTag instanceof SweeperCloudFragment) {
sweeperCloudFragment = (SweeperCloudFragment) fragmentByTag;
} else {
sweeperCloudFragment = new SweeperCloudFragment();
}
if (!sweeperCloudFragment.isAdded()) {
supportFragmentManager.beginTransaction().add(containerId, sweeperCloudFragment, SweeperCloudFragment.TAG).commitAllowingStateLoss();
}
return;
}
CallerLogger.d(TAG, "准备show fragment");
supportFragmentManager.beginTransaction().show(sweeperCloudFragment).commitAllowingStateLoss();
}
private void hideFragment() {
if (sweeperOperateFragment != null) {
CallerLogger.d(TAG, "准备hide operate fragment");
activity.getSupportFragmentManager().beginTransaction().hide(sweeperOperateFragment).commitAllowingStateLoss();
} else if (sweeperCloudFragment != null) {
CallerLogger.d(TAG, "准备hide cloud fragment");
activity.getSupportFragmentManager().beginTransaction().hide(sweeperCloudFragment).commitAllowingStateLoss();
}
CallerSweeperModeListenerManager.INSTANCE.removeListener(TAG);
}
@Override
public void createCoverage(FragmentActivity activity, int containerId) {
}
@NotNull
@Override
public String getFunctionName() {
return null;
}
@Nullable
@Override
public Fragment createCoverage(@Nullable FragmentActivity fragmentActivity, @Nullable Integer integer) {
this.containerId = integer;
this.activity = fragmentActivity;
// 第一优先级:需要默认能切换清扫业务模式
// 第二优先级如果能切换清扫模式查询SP中缓存的当前模式用户切换后会在SP中写入当前模式切换完后清除因为现在产品确认还不需要每次启动时首先使用用户上次选择的模式目前优先还是使用gradle中默认配置的模式打开
// 第三优先级如果不能切换清扫模式或者SP中没有用户选择的当前模式查询gradle中默认配置的当前模式用户不进行切换时SP中没有配置默认使用的gradle中默认当前模式
CallerLogger.i(M_SWEEPER + TAG, "清扫车启动当前业务模式isSPCurrentSweeperOperateMode="
+ SweeperVehicleConfigUtils.isSPCurrentSweeperOperateMode()
+ ", isSPCurrentSweeperCloudMode=" + SweeperVehicleConfigUtils.isSPCurrentSweeperCloudMode());
if (SweeperVehicleConfigUtils.isDefaultSweeperCanSwitchMode(FunctionBuildConfig.sweeperCanSwitchMode)
&& SweeperVehicleConfigUtils.isSPCurrentSweeperOperateMode()) {
FunctionBuildConfig.sweeperCurrentMode = SweeperVehicleConfigUtils.BUSINESS_MODE_OPERATE;
showOperateFragment();
ToastUtils.showLong("当前清扫业务模式:运营");
} else if (SweeperVehicleConfigUtils.isDefaultSweeperCanSwitchMode(FunctionBuildConfig.sweeperCanSwitchMode)
&& SweeperVehicleConfigUtils.isSPCurrentSweeperCloudMode()) {
FunctionBuildConfig.sweeperCurrentMode = SweeperVehicleConfigUtils.BUSINESS_MODE_CLOUD;
showCloudFragment();
ToastUtils.showLong("当前清扫业务模式:云控");
} else if (SweeperVehicleConfigUtils.isDefaultSweeperOperateMode(FunctionBuildConfig.sweeperDefaultMode)) {
FunctionBuildConfig.sweeperCurrentMode = SweeperVehicleConfigUtils.BUSINESS_MODE_OPERATE;
showOperateFragment();
ToastUtils.showLong("当前清扫业务模式:运营");
} else if (SweeperVehicleConfigUtils.isDefaultSweeperCloudMode(FunctionBuildConfig.sweeperDefaultMode)) {
FunctionBuildConfig.sweeperCurrentMode = SweeperVehicleConfigUtils.BUSINESS_MODE_CLOUD;
showCloudFragment();
ToastUtils.showLong("当前清扫业务模式:云控");
} else {
// 默认云控模式
FunctionBuildConfig.sweeperCurrentMode = SweeperVehicleConfigUtils.BUSINESS_MODE_CLOUD;
showCloudFragment();
ToastUtils.showLong("当前清扫业务模式:云控");
}
CallerSweeperModeListenerManager.INSTANCE.addListener(TAG, this);
return null;
}
@Override
public void onDestroy() {
//若不调用finish, 设置中打开关闭UITouch,会造成och fragment 重叠
if (activity == null) return;
activity.finish();
}
@SuppressLint("CheckResult")
@Override
public void onSweeperCurrentModeChanged(@NonNull String currentMode) {
// 日志、埋点
CallerLogger.i(M_SWEEPER + TAG, "切换清扫车业务模式,当前切换的模式:" + currentMode);
SweeperAnalyticsManager.getInstance().trackSweeperModeChangeEvent(currentMode);
Observable.just(currentMode)
.observeOn(Schedulers.io())
.subscribeOn(Schedulers.io())
.subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
// 写入SP当前模式
SweeperVehicleConfigUtils.setSPCurrentSweeperMode(currentMode);
// 清除本地业务缓存数据
MyDataBase.getInstance().getWeltDataDao().deleteAllWeltData();
// 等清除完数据库数据后重启App
UiThreadHandler.postDelayed(new Runnable() {
@Override
public void run() {
AppUtils.relaunchApp(true);
}
}, 1000L);
}
});
}
}

View File

@@ -0,0 +1,122 @@
package com.mogo.och.sweeper
import android.annotation.SuppressLint
import android.content.Context
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
import com.alibaba.android.arouter.facade.annotation.Route
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.function.api.vehicle.IMoGoSweeperModeListener
import com.mogo.eagle.core.function.call.vehicle.CallerSweeperModeListenerManager
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.i
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.eagle.core.utilcode.mogo.vehicle.SweeperVehicleConfigUtils
import com.mogo.eagle.core.utilcode.mogo.vehicle.SweeperVehicleConfigUtils.isDefaultSweeperCanSwitchMode
import com.mogo.eagle.core.utilcode.mogo.vehicle.SweeperVehicleConfigUtils.isDefaultSweeperCloudMode
import com.mogo.eagle.core.utilcode.mogo.vehicle.SweeperVehicleConfigUtils.isDefaultSweeperOperateMode
import com.mogo.eagle.core.utilcode.mogo.vehicle.SweeperVehicleConfigUtils.isSPCurrentSweeperCloudMode
import com.mogo.eagle.core.utilcode.mogo.vehicle.SweeperVehicleConfigUtils.isSPCurrentSweeperOperateMode
import com.mogo.eagle.core.utilcode.mogo.vehicle.SweeperVehicleConfigUtils.setSPCurrentSweeperMode
import com.mogo.eagle.core.utilcode.util.AppUtils
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.mogo.och.common.module.biz.constant.OchCommonConst
import com.mogo.och.common.module.biz.provider.CommonServiceImpl
import com.mogo.och.sweeper.cloud.fragment.SweeperCloudFragment
import com.mogo.och.sweeper.common.database.MyDataBase
import com.mogo.och.sweeper.common.util.SweeperAnalyticsManager
import com.mogo.och.sweeper.operate.fragment.SweeperOperateFragment
import io.reactivex.Observable
import io.reactivex.schedulers.Schedulers
/**
* 清扫车业务实现入口
*
* @author tongchenfei
*/
@Route(path = OchCommonConst.SWEEPER_DRIVER)
class SweeperProvider : CommonServiceImpl() {
private var sweeperOperateFragment: SweeperOperateFragment? = null
private var sweeperCloudFragment: SweeperCloudFragment? = null
override fun getFragment(): Fragment {
// 第一优先级:需要默认能切换清扫业务模式
// 第二优先级如果能切换清扫模式查询SP中缓存的当前模式用户切换后会在SP中写入当前模式切换完后清除因为现在产品确认还不需要每次启动时首先使用用户上次选择的模式目前优先还是使用gradle中默认配置的模式打开
// 第三优先级如果不能切换清扫模式或者SP中没有用户选择的当前模式查询gradle中默认配置的当前模式用户不进行切换时SP中没有配置默认使用的gradle中默认当前模式
i(
SceneConstant.M_SWEEPER + TAG, "清扫车启动当前业务模式isSPCurrentSweeperOperateMode="
+ isSPCurrentSweeperOperateMode()
+ ", isSPCurrentSweeperCloudMode=" + isSPCurrentSweeperCloudMode()
)
if (isDefaultSweeperCanSwitchMode(FunctionBuildConfig.sweeperCanSwitchMode)
&& isSPCurrentSweeperOperateMode()
) {
FunctionBuildConfig.sweeperCurrentMode = SweeperVehicleConfigUtils.BUSINESS_MODE_OPERATE
ToastUtils.showLong("当前清扫业务模式:运营")
return showOperateFragment()
} else if (isDefaultSweeperCanSwitchMode(FunctionBuildConfig.sweeperCanSwitchMode)
&& isSPCurrentSweeperCloudMode()
) {
FunctionBuildConfig.sweeperCurrentMode = SweeperVehicleConfigUtils.BUSINESS_MODE_CLOUD
ToastUtils.showLong("当前清扫业务模式:云控")
return showCloudFragment()
} else if (isDefaultSweeperOperateMode(FunctionBuildConfig.sweeperDefaultMode)) {
FunctionBuildConfig.sweeperCurrentMode = SweeperVehicleConfigUtils.BUSINESS_MODE_OPERATE
ToastUtils.showLong("当前清扫业务模式:运营")
return showOperateFragment()
} else if (isDefaultSweeperCloudMode(FunctionBuildConfig.sweeperDefaultMode)) {
FunctionBuildConfig.sweeperCurrentMode = SweeperVehicleConfigUtils.BUSINESS_MODE_CLOUD
ToastUtils.showLong("当前清扫业务模式:云控")
return showCloudFragment()
} else {
// 默认云控模式
FunctionBuildConfig.sweeperCurrentMode = SweeperVehicleConfigUtils.BUSINESS_MODE_CLOUD
ToastUtils.showLong("当前清扫业务模式:云控")
return showCloudFragment()
}
}
override fun init(context: Context) {
}
private fun showOperateFragment():Fragment {
if(sweeperOperateFragment==null){
sweeperOperateFragment = SweeperOperateFragment()
}
return sweeperOperateFragment!!
}
private fun showCloudFragment():Fragment {
if(sweeperCloudFragment==null){
sweeperCloudFragment = SweeperCloudFragment()
}
return sweeperCloudFragment!!
}
@SuppressLint("CheckResult")
fun onSweeperCurrentModeChanged(currentMode: String) {
// 日志、埋点
i(SceneConstant.M_SWEEPER + TAG, "切换清扫车业务模式,当前切换的模式:$currentMode")
SweeperAnalyticsManager.getInstance().trackSweeperModeChangeEvent(currentMode)
Observable.just(currentMode)
.observeOn(Schedulers.io())
.subscribeOn(Schedulers.io())
.subscribe { // 写入SP当前模式
setSPCurrentSweeperMode(currentMode)
// 清除本地业务缓存数据
MyDataBase.getInstance().weltDataDao.deleteAllWeltData()
// 等清除完数据库数据后重启App
UiThreadHandler.postDelayed({ AppUtils.relaunchApp(true) }, 1000L)
}
}
override fun invokeByName(type: String,value: Any) {
if (value is String && type=="reStart") {
onSweeperCurrentModeChanged(value)
}
}
companion object {
private const val TAG = "SweeperProvider"
}
}

View File

@@ -18,7 +18,7 @@ import com.mogo.och.common.module.manager.autopilotmanager.OCHAdasAbilityManager
import com.mogo.och.taxi.callback.ITaxiADASStatusCallback;
import com.mogo.och.taxi.callback.ITaxiControllerStatusCallback;
import com.mogo.och.taxi.callback.ITaxiOrderStatusCallback;
import com.mogo.och.common.module.biz.login.TaxiDriverRoleEnum;
import com.mogo.och.common.module.biz.login.RoleEnum;
import com.mogo.och.taxi.constant.TaxiUnmannedConst;
import com.mogo.och.taxi.ui.routing.TaxiRoutingModel;
import com.mogo.och.taxi.ui.task.TaxiTaskModel;
@@ -203,9 +203,9 @@ public class TaxiPresenter extends Presenter<TaxiFragment> implements ITaxiADASS
// 设置当前用户角色
String role = "";
if (TaxiDriverRoleEnum.DEMO == LoginStatusManager.getPurpose()) {
if (RoleEnum.DEMO == LoginStatusManager.getPurpose()) {
role = TaxiUnmannedConst.DEMO_USER;
} else if (TaxiDriverRoleEnum.TEST == LoginStatusManager.getPurpose()) {
} else if (RoleEnum.TEST == LoginStatusManager.getPurpose()) {
role = TaxiUnmannedConst.TEST_USER;
}
String finalRole = role;

View File

@@ -351,15 +351,3 @@ def variantName() {
}
def variantVehicleName() {
if(gradle.startParameter.taskNames.size()>0) {
for (String taskName : gradle.startParameter.taskNames) {
if (taskName.contains("Debug") | taskName.contains("Release")) {
return taskName
}
}
}
return "buspassenger"
}

View File

@@ -0,0 +1,24 @@
{
"mogo": {
"B1":["shuttle","bus"],
"B2":["shuttle","bus"],
"T1T2":["taxi"],
"M1":["charter"]
},
"dali": {
"B1":["shuttle"],
"B2":["shuttle"],
"M1":["charter"]
},
"yantai": {
"B1":["shuttle"],
"B2":["shuttle"],
"M1":["charter"]
},
"saas": {
"T1T2":["taxi"],
"B1":["shuttle","bus"],
"B2":["shuttle","bus"],
"M1":["charter"]
}
}

View File

@@ -8,6 +8,7 @@ project.android.productFlavors {
buildConfigField 'String', 'URLs', "\"${readFileToJson("mogo").replace("\"", "\\\"")}\""
buildConfigField 'String', 'mediaUrlConfig', "\"${readMediaUrlConfigFromJsonFile("mogo").replace("\"", "\\\"")}\""
buildConfigField 'String', 'musicUrlConfig', "\"${readMusicUrlConfigFromJsonFile("mogo").replace("\"", "\\\"")}\""
buildConfigField 'String', 'supportProduct', "\"${readProductWithVehicleConfigFromJsonFile("mogo").replace("\"", "\\\"")}\""
}
yantai {
dimension "project"
@@ -15,6 +16,7 @@ project.android.productFlavors {
buildConfigField 'String', 'URLs', "\"${readFileToJson("yantai").replace("\"", "\\\"")}\""
buildConfigField 'String', 'mediaUrlConfig', "\"${readMediaUrlConfigFromJsonFile("yantai").replace("\"", "\\\"")}\""
buildConfigField 'String', 'musicUrlConfig', "\"${readMusicUrlConfigFromJsonFile("yantai").replace("\"", "\\\"")}\""
buildConfigField 'String', 'supportBusiness', "\"${readProductWithVehicleConfigFromJsonFile("yantai").replace("\"", "\\\"")}\""
}
dali {
@@ -23,6 +25,7 @@ project.android.productFlavors {
buildConfigField 'String', 'URLs', "\"${readFileToJson("dali").replace("\"", "\\\"")}\""
buildConfigField 'String', 'mediaUrlConfig', "\"${readMediaUrlConfigFromJsonFile("dali").replace("\"", "\\\"")}\""
buildConfigField 'String', 'musicUrlConfig', "\"${readMusicUrlConfigFromJsonFile("dali").replace("\"", "\\\"")}\""
buildConfigField 'String', 'supportBusiness', "\"${readProductWithVehicleConfigFromJsonFile("dali").replace("\"", "\\\"")}\""
}
saas {
dimension "project"
@@ -30,6 +33,7 @@ project.android.productFlavors {
buildConfigField 'String', 'URLs', "\"${readFileToJson("saas").replace("\"", "\\\"")}\""
buildConfigField 'String', 'mediaUrlConfig', "\"${readMediaUrlConfigFromJsonFile("saas").replace("\"", "\\\"")}\""
buildConfigField 'String', 'musicUrlConfig', "\"${readMusicUrlConfigFromJsonFile("saas").replace("\"", "\\\"")}\""
buildConfigField 'String', 'supportBusiness', "\"${readProductWithVehicleConfigFromJsonFile("saas").replace("\"", "\\\"")}\""
}
// 配置网络环境QA、线上、演示

View File

@@ -18,7 +18,6 @@ Object readMediaUrlConfigFromJsonFile(env){
def getKey = flavorNames
config.get(env).each {key, value ->
// 匹配flavor对应的 json
println "--------${flavorNames.toLowerCase()}---------${key}"
if(flavorNames.toLowerCase().contains(key)){
getKey = key
return true
@@ -31,6 +30,39 @@ Object readMediaUrlConfigFromJsonFile(env){
return null
}
/**
* 读取各车型宣传视频本地配置
* @param env
* @return
*/
Object readProductWithVehicleConfigFromJsonFile(env){
try {
// 加载config.json 文件
File file = new File("${rootDir}/app/config/productWithVehicle.json")
def jsonSlurper = new JsonSlurper()
// 解析json
def config = jsonSlurper.parse(file)
def flavorNames = variantVehicleName()
def jsonOutput = new JsonOutput()
def getKey = flavorNames
config.get(env).each {key, value ->
// 匹配flavor对应的 json
println "对比${flavorNames.toLowerCase()}---------${key}---${value}"
if(flavorNames.toLowerCase().contains("${env}${key.toLowerCase()}")){
getKey = key
println "对比结果${flavorNames.toLowerCase()}---------${key}"
return true
}
}
return jsonOutput.toJson(config.get(env).get(getKey))
} catch (IOException e) {
e.printStackTrace()
}
return null
}
/**
* 读取各车型宣传视频本地配置
@@ -61,6 +93,17 @@ Object readMusicUrlConfigFromJsonFile(env){
return null
}
def variantVehicleName() {
if(gradle.startParameter.taskNames.size()>0) {
for (String taskName : gradle.startParameter.taskNames) {
if (taskName.contains("Debug") | taskName.contains("Release")) {
return taskName
}
}
}
return "buspassenger"
}
boolean isCurrentDriver(String flavors) {
if(isDriver() && isCurrentFlavors(flavors)){
@@ -114,4 +157,5 @@ ext {
isCurrentPassenger = this.&isCurrentPassenger
readMediaUrlConfigFromJsonFile = this.&readMediaUrlConfigFromJsonFile
readMusicUrlConfigFromJsonFile = this.&readMusicUrlConfigFromJsonFile
readProductWithVehicleConfigFromJsonFile = this.&readProductWithVehicleConfigFromJsonFile
}

View File

@@ -7,11 +7,11 @@ project.android.productFlavors {
// 配置AndroidManifest.xml中用到的参数
manifestPlaceholders = [
CHANNEL_VALUE_TAIL : "JL",
CHANNEL_VALUE_TAIL : "B1",
]
// ①标识构建的应用身份类型,具体查看 README.md APP_IDENTITY_MODE规则
buildConfigField 'String', 'APP_IDENTITY_MODE_TAIL', "\"JL\""
buildConfigField 'String', 'APP_IDENTITY_MODE_TAIL', "\"B1\""
// ②构建的是否要动态更换模型
buildConfigField 'boolean', 'IS_CAR_MODEL_CHANGE', 'true'

View File

@@ -14,11 +14,11 @@ project.android.productFlavors {
}
//高德地图鉴权信息
manifestPlaceholders = [
CHANNEL_VALUE_TAIL: "M2",
CHANNEL_VALUE_TAIL: "B2",
]
// ①标识构建的应用身份类型,具体查看 README.md APP_IDENTITY_MODE规则
buildConfigField 'String', 'APP_IDENTITY_MODE_TAIL', "\"M2\""
buildConfigField 'String', 'APP_IDENTITY_MODE_TAIL', "\"B2\""
// ②构建的是否要动态更换模型
buildConfigField 'boolean', 'IS_CAR_MODEL_CHANGE', 'false'

View File

@@ -7,16 +7,22 @@ project.android.productFlavors {
// 配置AndroidManifest.xml中用到的参数
manifestPlaceholders = [
CHANNEL_VALUE_TAIL: "FT",
CHANNEL_VALUE_TAIL: "C1",
]
// ①标识构建的应用身份类型,具体查看 README.md APP_IDENTITY_MODE规则
buildConfigField 'String', 'APP_IDENTITY_MODE_TAIL', "\"FT\""
buildConfigField 'String', 'APP_IDENTITY_MODE_TAIL', "\"C1\""
// ②构建的是否要动态更换模型
buildConfigField 'boolean', 'IS_CAR_MODEL_CHANGE', 'true'
// ③不能启动自驾的档位
buildConfigField 'java.util.Set<chassis.Chassis.GearPosition>', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'null'
// ⑤清扫车 默认模式(运营/云控)
buildConfigField 'String', 'SWEEPER_DEFAULT_MODE', '\"Cloud\"'
// ⑥清扫车 是否能切换模式
buildConfigField 'boolean', 'SWEEPER_CAN_SWITCH_MODE', 'true'
}
}

View File

@@ -7,12 +7,12 @@ project.android.productFlavors {
// 配置AndroidManifest.xml中用到的参数
manifestPlaceholders = [
CHANNEL_VALUE_TAIL: "DFHQ",
CHANNEL_VALUE_TAIL: "T1T2",
]
// ①标识构建的应用身份类型,具体查看 README.md APP_IDENTITY_MODE规则
buildConfigField 'String', 'APP_IDENTITY_MODE_TAIL', "\"DFHQ\""
buildConfigField 'String', 'APP_IDENTITY_MODE_TAIL', "\"T1T2\""
// ②构建的是否要动态更换模型
buildConfigField 'boolean', 'IS_CAR_MODEL_CHANGE', 'true'

View File

@@ -1,6 +1,7 @@
package com.mogo.launcher.startup
import android.content.Context
import com.google.gson.reflect.TypeToken
import com.mogo.commons.debug.DebugConfig
import com.mogo.eagle.core.data.app.AppConfigInfo
import com.mogo.eagle.core.data.config.FunctionBuildConfig
@@ -40,8 +41,10 @@ object ConfigStartUp {
FunctionBuildConfig.gpsProvider = BuildConfig.GPS_PROVIDER
// 演示模式,上一次勾选的数据
FunctionBuildConfig.isDemoMode = BuildConfig.IS_DEMO_MODE
// // app安装的身份信息
// app安装的身份信息
FunctionBuildConfig.appIdentityMode = "Product_${BuildConfig.APP_IDENTITY_MODE_BODY}_${BuildConfig.APP_IDENTITY_MODE_TAIL}"
// 支持的业务类型
FunctionBuildConfig.supportBusiness = GsonUtils.fromJson(BuildConfig.supportBusiness, object : TypeToken<MutableList<String>>() {}.type)
// 各个module需要的url
FunctionBuildConfig.urlJson = GsonUtils.fromJson(BuildConfig.URLs, UrlConfig::class.java)
//不能启动自动驾驶的档位
@@ -105,13 +108,13 @@ object ConfigStartUp {
} else if (AppIdentityModeUtils.isSweeper(FunctionBuildConfig.appIdentityMode)) {
HdMapBuildConfig.currentCarVrIconRes = R.raw.huanwei
}
if (AppIdentityModeUtils.isJL(FunctionBuildConfig.appIdentityMode)){
if (AppIdentityModeUtils.isB1(FunctionBuildConfig.appIdentityMode)){
HdMapBuildConfig.currentCarVrIconRes = R.raw.xiaoba
}
if (AppIdentityModeUtils.isM1(FunctionBuildConfig.appIdentityMode)){
HdMapBuildConfig.currentCarVrIconRes = R.raw.m1
}
if (AppIdentityModeUtils.isM2(FunctionBuildConfig.appIdentityMode)) {
if (AppIdentityModeUtils.isB2(FunctionBuildConfig.appIdentityMode)) {
HdMapBuildConfig.currentCarVrIconRes = R.raw.m2
}
@@ -119,7 +122,7 @@ object ConfigStartUp {
if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode) ||
AppIdentityModeUtils.isShuttle(FunctionBuildConfig.appIdentityMode)
|| AppIdentityModeUtils.isM1(FunctionBuildConfig.appIdentityMode) ||
AppIdentityModeUtils.isM2(FunctionBuildConfig.appIdentityMode)) {
AppIdentityModeUtils.isB2(FunctionBuildConfig.appIdentityMode)) {
//是否显示 限速UI
HmiBuildConfig.isShowLimitingVelocityView = false
//白天模式

View File

@@ -174,9 +174,9 @@ class SmallMapView @JvmOverloads constructor(
// 关闭显示实时路况图层aMap是地图控制器对象。
mAMap?.isTrafficEnabled = false
// 设置 锚点 图标
iconRes = if (AppIdentityModeUtils.isJL(FunctionBuildConfig.appIdentityMode)) {
iconRes = if (AppIdentityModeUtils.isB1(FunctionBuildConfig.appIdentityMode)) {
R.drawable.map_bus_icon
} else if (AppIdentityModeUtils.isM2(FunctionBuildConfig.appIdentityMode) || AppIdentityModeUtils.isM1(FunctionBuildConfig.appIdentityMode)) {
} else if (AppIdentityModeUtils.isB2(FunctionBuildConfig.appIdentityMode) || AppIdentityModeUtils.isM1(FunctionBuildConfig.appIdentityMode)) {
R.drawable.map_m2_icon
} else {
R.drawable.map_car_icon

View File

@@ -119,6 +119,12 @@ object FunctionBuildConfig {
@JvmField
var appIdentityMode = "Taxi_Driver_Base"
@Volatile
@JvmField
var supportBusiness = mutableListOf<String>()
/**
* 各车型宣传视频本地配置
* 广告json

View File

@@ -11,13 +11,13 @@ fun AppIdentityModeUtils.getMisChannelCode(appIdentityMode: String): Int {
isCharter(appIdentityMode) && isPassenger(appIdentityMode) -> 8 // 包车乘客端
isCharter(appIdentityMode) && isDriver(appIdentityMode) -> 9 // 包车司机端
isShuttle(appIdentityMode) && isPassenger(appIdentityMode) && isJL(appIdentityMode) -> 10 // B1接驳乘客端
isShuttle(appIdentityMode) && isDriver(appIdentityMode) && isJL(appIdentityMode) -> 11 // B1接驳司机端
isShuttle(appIdentityMode) && isPassenger(appIdentityMode) && isB1(appIdentityMode) -> 10 // B1接驳乘客端
isShuttle(appIdentityMode) && isDriver(appIdentityMode) && isB1(appIdentityMode) -> 11 // B1接驳司机端
isSweeper(appIdentityMode) && isDriver(appIdentityMode) -> 12 // 清扫车司机端
isShuttle(appIdentityMode) && isPassenger(appIdentityMode) && isM2(appIdentityMode) -> 17 // B2接驳乘客端
isShuttle(appIdentityMode) && isDriver(appIdentityMode) && isM2(appIdentityMode) -> 15 // B2接驳司机端
isShuttle(appIdentityMode) && isPassenger(appIdentityMode) && isB2(appIdentityMode) -> 17 // B2接驳乘客端
isShuttle(appIdentityMode) && isDriver(appIdentityMode) && isB2(appIdentityMode) -> 15 // B2接驳司机端
else -> 0
}
@@ -34,21 +34,21 @@ object AppIdentityModeUtils {
private const val PASSENGER = "Passenger"
// 业务
private const val TAXI = "Taxi"
private const val BUS = "Bus"
private const val SWEEPER = "Sweeper"
private const val SHUTTLE = "Shuttle"
private const val CHARTER = "Charter"
const val TAXI = "Taxi"
const val BUS = "Bus"
const val SWEEPER = "Sweeper"
const val SHUTTLE = "Shuttle"
const val CHARTER = "Charter"
// 车型
private const val M1 = "M1"
private const val M2 = "M2"
private const val JL = "JL"
private const val DFHQ = "DFHQ"
private const val FT = "FT"
private const val B2 = "B2"
private const val B1 = "B1"
private const val T1T2 = "T1T2"
private const val C1 = "C1"
private fun getInfo(appIdentityMode: String): Array<String> {
fun getInfo(appIdentityMode: String): Array<String> {
val split = appIdentityMode.split("_")
if (split.size == 3) {
return split.toTypedArray()
@@ -244,24 +244,24 @@ object AppIdentityModeUtils {
fun isDFHQ(appIdentityMode: String): Boolean {
val (_, _, model) = getInfo(appIdentityMode)
if (model.isNotEmpty()) {
return model == DFHQ
return model == T1T2
}
return false
}
@JvmStatic
fun isFT(appIdentityMode: String): Boolean {
fun isC1(appIdentityMode: String): Boolean {
val (_, _, model) = getInfo(appIdentityMode)
if (model.isNotEmpty()) {
return model == FT
return model == C1
}
return false
}
@JvmStatic
fun isJL(appIdentityMode: String): Boolean {
fun isB1(appIdentityMode: String): Boolean {
val (_, _, model) = getInfo(appIdentityMode)
if (model.isNotEmpty()) {
return model == JL
return model == B1
}
return false
}
@@ -276,10 +276,10 @@ object AppIdentityModeUtils {
}
@JvmStatic
fun isM2(appIdentityMode: String): Boolean {
fun isB2(appIdentityMode: String): Boolean {
val (_, _, model) = getInfo(appIdentityMode)
if (model.isNotEmpty()) {
return model == M2
return model == B2
}
return false
}

View File

@@ -1,6 +1,5 @@
package com.mogo.commons.screen;
import android.app.Application;
import android.content.Context;
@@ -8,7 +7,6 @@ import com.mogo.eagle.core.data.config.FunctionBuildConfig;
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils;
import me.jessyan.autosize.AutoSizeConfig;
import me.jessyan.autosize.utils.AutoSizeUtils;
public class ScreenHelper {
@@ -25,7 +23,7 @@ public class ScreenHelper {
AppIdentityModeUtils.isPassenger((FunctionBuildConfig.appIdentityMode))) {
baseWidth = 1920;
baseHeight = 1080;
} else if (AppIdentityModeUtils.isM2(FunctionBuildConfig.appIdentityMode) &&
} else if (AppIdentityModeUtils.isB2(FunctionBuildConfig.appIdentityMode) &&
AppIdentityModeUtils.isPassenger((FunctionBuildConfig.appIdentityMode))) {
baseWidth = 1080;
baseHeight = 1920;