[业务分发]
This commit is contained in:
yangyakun
2024-04-09 16:49:26 +08:00
parent 223e5b3a03
commit a055a942cd
52 changed files with 901 additions and 761 deletions

View File

@@ -1,6 +1,10 @@
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
@@ -8,6 +12,7 @@ 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
@@ -26,85 +31,10 @@ import com.mogo.och.facade.constant.FacadeConst
* @author tongchenfei
*/
@Route(path = FacadeConst.DRIVER_PATH)
class FacadeDriverProvider : IMoGoFunctionProvider, ILoginCallback {
private var containerId = 0
private var activity: FragmentActivity? = null
class FacadeDriverProvider : FacadeProvider() {
private val TAG = "FacadeDriverProvider"
override fun init(context: Context) {
d(TAG, "init")
LoginStatusManager.addListener(TAG, this)
queryLoginStatusByNet()
}
override fun createCoverage(fragmentActivity: FragmentActivity?, integer: Int?): Fragment? {
containerId = integer!!
activity = fragmentActivity
showFragment()
return null
}
override val functionName: String
get() = TAG
private fun showFragment() {
val supportFragmentManager: FragmentManager? = activity?.supportFragmentManager
val fragment= if(LoginStatusManager.isLogin()){
getFragment()
}else{
LoginStatusManager.getFragment()
}
d(SceneConstant.M_TAXI_P + TAG, "准备add fragment======")
if(supportFragmentManager!=null){
val back = supportFragmentManager.beginTransaction()
back.replace(containerId,fragment,fragment.tag)
back.commit()
}
}
private fun getFragment(): Fragment {
if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)) {
return getFragmentByServeName(OchCommonConst.BUS_DRIVER)
} else if (AppIdentityModeUtils.isShuttle(FunctionBuildConfig.appIdentityMode)) {
return getFragmentByServeName(OchCommonConst.SHUTTLE_DRIVER)
} else if (AppIdentityModeUtils.isCharter(FunctionBuildConfig.appIdentityMode)) {
return getFragmentByServeName(OchCommonConst.CHARTER_DRIVER)
} else if (AppIdentityModeUtils.isTaxi(FunctionBuildConfig.appIdentityMode)) {
return getFragmentByServeName(OchCommonConst.TAXI_DRIVER)
} else if (AppIdentityModeUtils.isSweeper(FunctionBuildConfig.appIdentityMode)) {
return getFragmentByServeName(OchCommonConst.SWEEPER_DRIVER)
}
return LoginStatusManager.getFragment()
}
private fun getFragmentByServeName(serviceName: String): Fragment {
val bizService = ARouter.getInstance().build(serviceName).navigation() as CommonService?
if (bizService == null) {
try {
return LoginStatusManager.getFragment()
} catch (e: ClassNotFoundException) {
OchChainLogManager.writeChainLog(
"Init",
"没有找到登录Fragment",
eventID = OchChainLogManager.EVENT_KEY_INFE_ERROR
)
return Fragment()
}
} else {
return bizService.getFragment()
}
}
override fun onDestroy() {
//若不调用finish, 设置中打开关闭UITouch,会造成och fragment 重叠
if (activity == null) return
activity!!.finish()
}
override fun onStatusChange(currentStatus: TaxiLoginStatusEnum) {
d(TAG, "登录状态发生改变 ${currentStatus}")
//showFragment()
}
}

View File

@@ -1,62 +0,0 @@
package com.mogo.och.facade.route;
import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_BUS;
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.function.api.base.IMoGoFunctionProvider;
import com.mogo.eagle.core.function.call.setting.CallerMoGoUiSettingManager;
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
import com.mogo.och.facade.constant.FacadeConst;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* 网约车小巴业务实现入口
*
* @author tongchenfei
*/
@Route(path = FacadeConst.PASSENGER_PATH)
public class FacadePassengerProvider implements IMoGoFunctionProvider {
private static final String TAG = "FacadePassengerProvider";
private int containerId;
private FragmentActivity activity;
@Override
public void init(Context context) {
}
private void showFragment() {
}
@NotNull
@Override
public String getFunctionName() {
return TAG;
}
@Nullable
@Override
public Fragment createCoverage(@Nullable FragmentActivity fragmentActivity, @Nullable Integer integer) {
this.containerId = integer;
this.activity = fragmentActivity;
showFragment();
return null;
}
@Override
public void onDestroy() {
//若不调用finish, 设置中打开关闭UITouch,会造成och fragment 重叠
if (activity == null) return;
activity.finish();
}
}

View File

@@ -0,0 +1,19 @@
package com.mogo.och.facade.route
import com.alibaba.android.arouter.facade.annotation.Route
import com.mogo.och.facade.constant.FacadeConst
/**
* 网约车小巴业务实现入口
*
* @author tongchenfei
*/
@Route(path = FacadeConst.PASSENGER_PATH)
class FacadePassengerProvider : FacadeProvider() {
private val TAG = FacadePassengerProvider::class.java.simpleName
override val functionName: String
get() = TAG
}

View File

@@ -0,0 +1,144 @@
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.facade.constant.FacadeConst
/**
* 网约车小巴业务实现入口
*
* @author tongchenfei
*/
abstract class FacadeProvider : IMoGoFunctionProvider, ILoginCallback {
private var containerId = 0
private var activity: FragmentActivity? = null
private val TAG = "FacadeProvider"
private var commonService: CommonService? = null
override fun init(context: Context) {
d(TAG, "FacadeProvider:init")
LoginStatusManager.addListener(TAG, this)
queryLoginStatusByNet()
}
override fun createCoverage(fragmentActivity: FragmentActivity?, integer: Int?): Fragment? {
containerId = integer!!
activity = fragmentActivity
showFragment()
return null
}
private fun showFragment() {
val supportFragmentManager: FragmentManager? = activity?.supportFragmentManager
val fragment = if (LoginStatusManager.isLogin()) {
getFragment()
} else {
LoginStatusManager.getFragment()
}
d(TAG, "切换 fragment:${fragment}")
if (supportFragmentManager != null) {
val back = supportFragmentManager.beginTransaction()
back.replace(containerId, fragment, fragment.tag)
back.commit()
}
}
private fun getFragment(): Fragment {
if (AppIdentityModeUtils.isBusDriver(FunctionBuildConfig.appIdentityMode)) {
return getFragmentByServeName(OchCommonConst.BUS_DRIVER)
} else if (AppIdentityModeUtils.isShuttleDriver(FunctionBuildConfig.appIdentityMode)) {
return getFragmentByServeName(OchCommonConst.SHUTTLE_DRIVER)
} else if (AppIdentityModeUtils.isCharterDriver(FunctionBuildConfig.appIdentityMode)) {
return getFragmentByServeName(OchCommonConst.CHARTER_DRIVER)
} else if (AppIdentityModeUtils.isTaxiDriver(FunctionBuildConfig.appIdentityMode)) {
return getFragmentByServeName(OchCommonConst.TAXI_DRIVER)
} else if (AppIdentityModeUtils.isSweeper(FunctionBuildConfig.appIdentityMode)) {
return getFragmentByServeName(OchCommonConst.SWEEPER_DRIVER)
} else if (AppIdentityModeUtils.isBusPassenger(FunctionBuildConfig.appIdentityMode)) {
return getFragmentByServeName(OchCommonConst.BUS_DRIVER)
} else if (AppIdentityModeUtils.isShuttlePassenger(FunctionBuildConfig.appIdentityMode)) {
return getFragmentByServeName(OchCommonConst.SHUTTLE_DRIVER)
} else if (AppIdentityModeUtils.isCharterPassenger(FunctionBuildConfig.appIdentityMode)) {
return getFragmentByServeName(OchCommonConst.CHARTER_DRIVER)
} else if (AppIdentityModeUtils.isTaxiPassenger(FunctionBuildConfig.appIdentityMode)) {
return getFragmentByServeName(OchCommonConst.TAXI_DRIVER)
}
return LoginStatusManager.getFragment()
}
private fun getFragmentByServeName(serviceName: String): Fragment {
commonService = ARouter.getInstance().build(serviceName).navigation() as CommonService?
return if (commonService == null) {
try {
LoginStatusManager.getFragment()
} catch (e: ClassNotFoundException) {
OchChainLogManager.writeChainLog(
"Init",
"没有找到登录Fragment",
eventID = OchChainLogManager.EVENT_KEY_INFE_ERROR
)
Fragment()
}
} else {
commonService!!.getFragment()
}
}
override fun onDestroy() {
//若不调用finish, 设置中打开关闭UITouch,会造成och fragment 重叠
if (activity == null) return
activity!!.finish()
}
override fun onStatusChange(currentStatus: TaxiLoginStatusEnum) {
d(TAG, "登录状态发生改变 ${currentStatus}")
showFragment()
}
private fun injectStatusBar() {
activity?.let {
val decorView = it.window.decorView as? FrameLayout ?: return
val contentView =
(decorView.findViewById<View>(android.R.id.content) as? ViewGroup)?.getChildAt(0)
?: return
contentView.fitsSystemWindows = false
decorView.clipToPadding = false
var statusBarView = decorView.findViewWithTag<View>("status_bar")
val statusBar = commonService?.getStatusBarView(it)
statusBarView = statusBar ?: StatusBarView(it)
statusBarView.tag = "status_bar"
val statusBarLP = FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT,
)
statusBarLP.topMargin = 0
statusBarLP.gravity = Gravity.TOP
decorView.addView(statusBarView, statusBarLP)
}
}
}