[登录fragment 内存泄漏、登录前先走一遍通用接口]
This commit is contained in:
yangyakun
2024-04-24 21:31:31 +08:00
parent 7258d2d50d
commit bf3f5e340b
15 changed files with 273 additions and 252 deletions

View File

@@ -59,10 +59,9 @@ public class BusPresenter extends Presenter<BusFragment>
public BusPresenter(BusFragment view) {
super(view);
//2021.11.1 鹰眼架构整合由IMoGoAutopilotStatusListener逐步替代IMogoAdasOCHCallback接口
OchAutoPilotStatusListenerManager.INSTANCE.addListener(TAG,this);
OrderModel.getInstance().init();
OCHAdasAbilityManager.getInstance().init(AbsMogoApplication.getApp());
LoginStatusManager.INSTANCE.addListener(TAG,this);
}
@Override
@@ -84,6 +83,8 @@ public class BusPresenter extends Presenter<BusFragment>
OrderModel.getInstance().setControllerStatusCallback(this);
OrderModel.getInstance().setPassengerCallback(this);
OrderModel.getInstance().setAdasStatusCallback(this);
OchAutoPilotStatusListenerManager.INSTANCE.addListener(TAG,this);
LoginStatusManager.INSTANCE.addListener(TAG,this);
}
public void releaseListener() {
@@ -93,6 +94,8 @@ public class BusPresenter extends Presenter<BusFragment>
OrderModel.getInstance().setPassengerCallback(null);
OrderModel.getInstance().setAdasStatusCallback(null);
OCHAdasAbilityManager.getInstance().release();
OchAutoPilotStatusListenerManager.INSTANCE.removeListener(TAG);
LoginStatusManager.INSTANCE.removeListener(TAG);
}
public void abortTask() {

View File

@@ -48,7 +48,6 @@ class DriverM1Presenter(view: DriverM1Fragment?) :
DriverM1Model.get().init(context)
OCHAdasAbilityManager.getInstance().init(AbsMogoApplication.getApp())
registerListener()
LoginStatusManager.addListener(TAG,this)
}
private fun registerListener() {
@@ -57,6 +56,7 @@ class DriverM1Presenter(view: DriverM1Fragment?) :
StopSideManager.addListener(TAG,this)
DriverM1Model.get().setDriverM1OrderCallback(this)
DriverM1Model.get().setChangeDestCallback(this)
LoginStatusManager.addListener(TAG,this)
}
private fun releaseListener() {
@@ -64,6 +64,7 @@ class DriverM1Presenter(view: DriverM1Fragment?) :
OchAutoPilotStatusListenerManager.removeListener(TAG)
DriverM1Model.get().setDriverM1OrderCallback(null)
DriverM1Model.get().setChangeDestCallback(null)
LoginStatusManager.removeListener(TAG)
}
override fun onDestroy(owner: LifecycleOwner) {

View File

@@ -9,7 +9,7 @@ import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.mogo.och.biz.login.callback.ILoginViewCallback
import com.mogo.och.biz.login.model.LoginStatusDefaultModel
import com.mogo.och.biz.login.model.LoginModel
import com.mogo.och.biz.login.ui.LoginFragment
import com.mogo.och.biz.login.ui.LoginPassengerFragment
import com.mogo.och.common.module.constant.OchCommonConst
@@ -35,7 +35,7 @@ import com.mogo.och.common.module.utils.FlavorUtils
class LoginProvider : LoginService {
private val tag = LoginProvider::class.java.simpleName
private lateinit var loginFragment: Fragment
private var loginFragment: Fragment?=null
private var loginStatus: LoginStatusEnum = LoginStatusEnum.None
private var businessEnum: BusinessEnum = BusinessEnum.None
private var openOrderStatusEnum: OpenOrderStatusEnum = OpenOrderStatusEnum.None
@@ -54,7 +54,21 @@ class LoginProvider : LoginService {
override fun getFragment(): Fragment {
CallerLogger.d(tag, "getFragment:${loginFragment}")
return loginFragment
if(loginFragment==null){
loginFragment = if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
LoginFragment()
} else if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) {
LoginPassengerFragment()
} else {
LoginFragment()
}
}
return loginFragment!!
}
override fun resetFragment() {
super.resetFragment()
loginFragment = null
}
override fun getStatusBarView(context: Context): View {
@@ -80,12 +94,12 @@ class LoginProvider : LoginService {
override fun queryLoginStatusByNet() {
CallerLogger.d(tag, "queryLoginStatusByNet")
LoginStatusDefaultModel.queryCarStatus()
LoginModel.queryCarStatus()
}
override fun loginOut(mLatitude: Double, mLongitude: Double) {
CallerLogger.d(tag, "loginOut mLatitude:${mLatitude}--mLongitude:${mLongitude}")
LoginStatusDefaultModel.logout(mLatitude, mLongitude)
LoginModel.logout(mLatitude, mLongitude)
}
override fun checkBusiness(businessType: Int): Boolean {

View File

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

View File

@@ -2,18 +2,39 @@ package com.mogo.och.biz.login.model
import android.annotation.SuppressLint
import android.content.Context
import com.mogo.commons.AbsMogoApplication
import com.mogo.commons.storage.SharedPrefsMgr
import com.mogo.eagle.core.data.BaseData
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager
import com.mogo.commons.storage.SharedPrefsMgr
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.eagle.core.utilcode.util.GsonUtils
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.TaxiLoginReqBean
import com.mogo.och.biz.login.bean.TaxiLoginRespBean
import com.mogo.och.biz.login.bean.TaxiLogoutReqBean
import com.mogo.och.biz.login.callback.ITaxiLoginCallback
import com.mogo.och.biz.login.net.OchCommonServiceManager
import com.mogo.och.biz.login.net.OchCommonServiceManager.logout
import com.mogo.och.biz.login.net.OchCommonServiceManager.queryDriverServiceStatus
import com.mogo.och.common.module.biz.login.LoginStatusEnum
import com.mogo.och.common.module.biz.login.LoginStatusEnum.Companion.valueOf
import com.mogo.och.common.module.biz.login.LoginStatusManager
import com.mogo.och.common.module.constant.OchCommonConst
import com.mogo.och.common.module.manager.socket.lan.bean.BusCacheKey
import com.mogo.och.common.module.manager.socket.lan.bean.LoginCacheStatus
import com.mogo.och.common.module.network.OchCommonServiceCallback
import com.mogo.och.common.module.utils.DateTimeUtil
import com.mogo.och.common.module.utils.ToastUtilsOch
import com.mogo.och.common.module.wigets.toast.ToastCharterUtils
import com.mogo.och.data.manager.cache.CacheDataManager
import io.reactivex.Observable
import io.reactivex.disposables.Disposable
import java.util.concurrent.TimeUnit
/**
* Created by pangfan on 2021/8/19
@@ -27,8 +48,14 @@ object LoginModel {
private val TAG = "TaxiLoginModel"
private var mContext: Context? = null
var iTaxiLoginCallback: ITaxiLoginCallback? = null
private var subscribe: Disposable? = null
init {
mContext = AbsMogoApplication.getApp()
}
fun init(context: Context) {
mContext = context.applicationContext
}
fun hasInit(): Boolean {
@@ -47,7 +74,6 @@ object LoginModel {
}
fun release() {
mContext = null
iTaxiLoginCallback = null
}
@@ -96,10 +122,7 @@ object LoginModel {
if (null != data && 0 == data.code) {
// 获取验证码成功
ToastCharterUtils.showToastShort(mContext?.getString(R.string.module_och_taxi_login_login_success))
LoginStatusDefaultModel.queryCarStatus()
mContext?.let { c ->
SharedPrefsMgr.getInstance().putString("och_account", phone)
}
queryCarStatus()
} else {
if (data != null) {
ToastCharterUtils.showToastShort(data.code.toString())
@@ -122,4 +145,118 @@ object LoginModel {
}
}
/**
* 接单状态和登录状态查询
* 1、初始化查询
* 2、错误重试
* 3、错误重试
* 4、登出后重试
* 5、变更出车状态查下
* 6、变更出车状态查下
* 7、网络状态变更后查询
* 8、登录页面关闭后查下状态
*/
fun queryCarStatus() {
mContext?.let {
queryDriverServiceStatus(it, object : OchCommonServiceCallback<DriverStatusQueryRespBean> {
override fun onSuccess(data: DriverStatusQueryRespBean) {
if (null != data && 0 == data.code) {
// 不用登录也可以获得支持的业务模式
LoginStatusManager.setBusinessType(data.data.businessType)
// 后台已登录
if (valueOf(data.data.driverStatus) == LoginStatusEnum.Login) {
// 业务不支持 去退出登录
if (!LoginStatusManager.checkBusiness(data.data.businessType)) {
val mLatitude = getChassisLocationGCJ02().latitude
val mLongitude = getChassisLocationGCJ02().longitude
LoginStatusManager.loginOut(mLatitude, mLongitude)
return
}
}
LoginStatusManager.setOpenOrderType(data.data.servingStatus)
LoginStatusManager.setLoginStatus(data.data.driverStatus)
LoginStatusManager.setLoginInfo(data.data)
d(SceneConstant.M_TAXI + TAG, "登录信息:$data")
loginSuccess(data)
}
}
override fun onError() {
if (!NetworkUtils.isConnected(mContext)) {
ToastCharterUtils.showToastShort(mContext!!.getString(R.string.network_error_tip))
} else {
ToastCharterUtils.showToastShort(mContext!!.getString(R.string.request_error_tip))
}
subscribe = Observable.timer(5, TimeUnit.SECONDS)
.subscribe { aLong: Long? -> queryCarStatus() }
}
override fun onFail(code: Int, msg: String) {
ToastUtilsOch.showWithCodeMessage(code, msg)
if (code == OchCommonConst.WAIT_TAKEN) {
subscribe = Observable.timer(3, TimeUnit.SECONDS)
.subscribe { aLong: Long? -> queryCarStatus() }
} else {
loginFail(LoginStatusManager.isLogin())
}
}
})
}
}
// 登出
fun logout(mLatitude: Double, mLongitude: Double) {
val location4Login = TaxiLogoutReqBean.Location4Login(mLatitude, mLongitude)
logout(
mContext!!, location4Login,
object : OchCommonServiceCallback<BaseData> {
override fun onSuccess(data: BaseData) {
if (null != data && 0 == data.code) {
loginFail(false)
queryCarStatus()
}
}
override fun onError() {
if (!NetworkUtils.isConnected(mContext)) {
ToastCharterUtils.showToastShort(mContext!!.getString(R.string.network_error_tip))
} else {
ToastCharterUtils.showToastShort(mContext!!.getString(R.string.request_error_tip))
}
}
override fun onFail(code: Int, msg: String) {
ToastUtilsOch.showWithCodeMessage(code, msg)
}
})
}
fun loginSuccess(data: DriverStatusQueryRespBean?) {
CallerLogger.d(SceneConstant.M_TAXI + TAG, "loginSuccess:${LoginStatusManager.isLogin()}")
if (LoginStatusManager.isLogin()) {
SharedPrefsMgr.getInstance().putString("och_account", data?.data?.phone)
} else {
SharedPrefsMgr.getInstance().putString("och_account", "")
}
data?.data?.driverStatus?.let { updateLoginLocalStatus(it) }
iTaxiLoginCallback?.searchStatusSuccess()
}
private fun updateLoginLocalStatus(loginStatus: Int = 0) {
val loginCacheStatus = LoginCacheStatus(loginStatus, DateTimeUtil.getCurrentTimeStamp())
mContext?.let {
CacheDataManager.instance.putCacheData(
it, BusCacheKey.BUS_LOGIN_STATUS_CACHE,
GsonUtils.toJson(loginCacheStatus))
}
}
fun loginFail(isLogin: Boolean) {
CallerLogger.d(SceneConstant.M_TAXI + TAG, "loginFail:$isLogin")
updateLoginLocalStatus(0)
}
}

View File

@@ -1,51 +0,0 @@
package com.mogo.och.biz.login.model
import android.annotation.SuppressLint
import com.mogo.commons.AbsMogoApplication
import com.mogo.commons.storage.SharedPrefsMgr
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.GsonUtils
import com.mogo.och.biz.login.bean.DriverStatusQueryRespBean
import com.mogo.och.common.module.biz.login.LoginStatusManager
import com.mogo.och.common.module.manager.socket.lan.bean.BusCacheKey
import com.mogo.och.common.module.manager.socket.lan.bean.LoginCacheStatus
import com.mogo.och.common.module.utils.DateTimeUtil
import com.mogo.och.data.manager.cache.CacheDataManager
@SuppressLint("StaticFieldLeak")
object LoginStatusDefaultModel : LoginStatusModel() {
const val TAG = "OchCommonLoginStatusDefaultModel"
init {
mContext = AbsMogoApplication.getApp();
}
override fun loginSuccess(data: DriverStatusQueryRespBean?) {
CallerLogger.d(SceneConstant.M_TAXI + TAG, "loginSuccess:${LoginStatusManager.isLogin()}")
if (LoginStatusManager.isLogin()) {
SharedPrefsMgr.getInstance().putString("och_account", data?.data?.phone)
} else {
SharedPrefsMgr.getInstance().putString("och_account", "")
}
data?.data?.driverStatus?.let { updateLoginLocalStatus(it) }
}
private fun updateLoginLocalStatus(loginStatus: Int = 0) {
val loginCacheStatus = LoginCacheStatus(loginStatus,DateTimeUtil.getCurrentTimeStamp())
CacheDataManager.instance.putCacheData(mContext, BusCacheKey.BUS_LOGIN_STATUS_CACHE,
GsonUtils.toJson(loginCacheStatus))
}
override fun loginFail(isLogin: Boolean) {
CallerLogger.d(SceneConstant.M_TAXI + TAG, "loginFail:$isLogin")
updateLoginLocalStatus(0)
}
}

View File

@@ -1,138 +0,0 @@
package com.mogo.och.biz.login.model;
import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI;
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.constant.OchCommonConst;
import com.mogo.och.common.module.network.OchCommonServiceCallback;
import com.mogo.och.common.module.utils.ToastUtilsOch;
import com.mogo.och.common.module.wigets.toast.ToastCharterUtils;
import java.util.concurrent.TimeUnit;
import io.reactivex.Observable;
import io.reactivex.disposables.Disposable;
public abstract class LoginStatusModel {
private static final String TAG = "OchCommonLoginStatusModel";
protected Context mContext;
private Disposable subscribe;
protected abstract void loginSuccess(DriverStatusQueryRespBean data);
protected abstract void loginFail(boolean isLogin);
/**
* 接单状态和登录状态查询
* 1、初始化查询
* 2、错误重试
* 3、错误重试
* 4、登出后重试
* 5、变更出车状态查下
* 6、变更出车状态查下
* 7、网络状态变更后查询
* 8、登录页面关闭后查下状态
*/
public void queryCarStatus() {
OchCommonServiceManager.queryDriverServiceStatus(mContext,
new OchCommonServiceCallback<DriverStatusQueryRespBean>() {
@Override
public void onSuccess(DriverStatusQueryRespBean data) {
if (null != data && 0 == data.code) {
// 不用登录也可以获得支持的业务模式
LoginStatusManager.setBusinessType(data.data.businessType);
// 后台已登录
if (LoginStatusEnum.valueOf(data.data.driverStatus)==LoginStatusEnum.Login) {
// 业务不支持 去退出登录
if (!LoginStatusManager.checkBusiness(data.data.businessType)) {
double mLatitude = CallerChassisLocationGCJ02ListenerManager.INSTANCE.getChassisLocationGCJ02().getLatitude();
double mLongitude =CallerChassisLocationGCJ02ListenerManager.INSTANCE.getChassisLocationGCJ02().getLongitude();
LoginStatusManager.loginOut(mLatitude,mLongitude);
return;
}
}
LoginStatusManager.setOpenOrderType(data.data.servingStatus);
LoginStatusManager.setLoginStatus(data.data.driverStatus);
LoginStatusManager.setLoginInfo(data.data);
CallerLogger.d(M_TAXI + TAG, "登录信息:" + data);
loginSuccess(data);
}
}
@Override
public void onError() {
if (!NetworkUtils.isConnected(mContext)) {
ToastCharterUtils.showToastShort(mContext.getString(R.string.network_error_tip));
} else {
ToastCharterUtils.showToastShort(mContext.getString(R.string.request_error_tip));
}
subscribe = Observable.timer(5, TimeUnit.SECONDS).subscribe(aLong -> {
queryCarStatus();
});
}
@Override
public void onFail(int code, String msg) {
ToastUtilsOch.showWithCodeMessage(code,msg);
if(code== OchCommonConst.WAIT_TAKEN){
subscribe = Observable.timer(3, TimeUnit.SECONDS).subscribe(aLong -> {
queryCarStatus();
});
}else {
loginFail(LoginStatusManager.isLogin());
}
}
});
}
// 登出
public void logout(double mLatitude,double mLongitude) {
TaxiLogoutReqBean.Location4Login location4Login = new TaxiLogoutReqBean.Location4Login(mLatitude, mLongitude);
OchCommonServiceManager.logout(mContext,location4Login,
new OchCommonServiceCallback<BaseData>() {
@Override
public void onSuccess(BaseData data) {
if (null != data && 0 == data.code) {
loginFail(false);
queryCarStatus();
}
}
@Override
public void onError() {
if (!NetworkUtils.isConnected(mContext)) {
ToastCharterUtils.showToastShort(mContext.getString(R.string.network_error_tip));
} else {
ToastCharterUtils.showToastShort(mContext.getString(R.string.request_error_tip));
}
}
@Override
public void onFail(int code, String msg) {
ToastUtilsOch.showWithCodeMessage(code,msg);
}
});
}
public void release() {
if(subscribe!=null&&!subscribe.isDisposed()){
subscribe.dispose();
}
}
}

View File

@@ -3,16 +3,14 @@ package com.mogo.och.biz.login.presenter
import androidx.lifecycle.LifecycleOwner
import com.mogo.commons.AbsMogoApplication
import com.mogo.commons.mvp.Presenter
import com.mogo.eagle.core.data.config.FunctionBuildConfig
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.RegexUtils
import com.mogo.eagle.core.utilcode.util.StringUtils
import com.mogo.och.biz.R
import com.mogo.och.biz.login.callback.ITaxiLoginCallback
import com.mogo.och.biz.login.ui.LoginFragment
import com.mogo.och.biz.login.model.LoginModel
import com.mogo.och.biz.login.model.LoginStatusDefaultModel
import com.mogo.och.common.module.biz.login.BusinessEnum
import com.mogo.och.common.module.biz.login.LoginStatusManager
import com.mogo.och.common.module.wigets.toast.ToastCharterUtils
import io.reactivex.Observable
@@ -33,6 +31,9 @@ class LoginPresenter(view: LoginFragment?) : Presenter<LoginFragment?>(view), IT
private val TAG = LoginPresenter::class.java.simpleName
private var phone:String?=null
private var code:String?=null
init {
initListeners()
CallerLogger.d(SceneConstant.M_TAXI + TAG, "网约车-Init")
@@ -43,6 +44,8 @@ class LoginPresenter(view: LoginFragment?) : Presenter<LoginFragment?>(view), IT
LoginModel.setiTaxiLoginCallback(this)
}
fun getPhoneCode(phone:String){
if(!LoginModel.hasInit()){
initListeners()
@@ -104,11 +107,25 @@ class LoginPresenter(view: LoginFragment?) : Presenter<LoginFragment?>(view), IT
ToastCharterUtils.showToastShort(R.string.module_och_taxi_login_code_error)
return
}
if(!LoginStatusManager.checkBusiness(LoginStatusManager.getBusInessType().code)){
LoginStatusDefaultModel.queryCarStatus()
LoginModel.queryCarStatus()
mView?.closeSoftInput()
this.phone = phone
this.code = code
}
override fun searchStatusSuccess() {
if (StringUtils.isEmpty(phone) || StringUtils.isEmpty(code)) {
return
}
mView?.closeSoftInput()
LoginModel.gotoLogin(phone,code)
if(!LoginStatusManager.checkBusiness(LoginStatusManager.getBusInessType().code)){
LoginModel.queryCarStatus()
return
}
if(!StringUtils.isEmpty(phone)&&!StringUtils.isEmpty(code)) {
LoginModel.gotoLogin(phone!!, code!!)
}
this.phone = null
this.code = null
}
}

View File

@@ -4,6 +4,7 @@ import android.graphics.Rect
import android.os.SystemClock
import android.view.*
import android.view.ViewTreeObserver.OnGlobalLayoutListener
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.content.ContextCompat
import androidx.core.widget.addTextChangedListener
import com.mogo.commons.mvp.MvpFragment
@@ -41,12 +42,40 @@ import kotlinx.android.synthetic.main.biz_login_view.eiv_Info
*/
class LoginFragment : MvpFragment<LoginFragment?, LoginPresenter?>(), ILoginViewCallback {
private var biz_cl_driver_main: ConstraintLayout? = null
private var onlayoutListener: OnGlobalLayoutListener? = object : OnGlobalLayoutListener {
override fun onGlobalLayout() {
try {
biz_cl_driver_main?.let {
val rect = Rect()
it.getWindowVisibleDisplayFrame(rect)
val mainInvisibleHeight = it.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) {
it.scrollTo(0, srollHeight)
}
CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "滚动的距离:$srollHeight")
} else {
it.scrollTo(0, 0)
}
}
} catch (e: Exception) {
e.printStackTrace()
}
}
}
override fun getLayoutId(): Int {
return R.layout.biz_login_view
}
override fun initViews() {
CallerLogger.d(TAG,"init")
CallerLogger.d(TAG, "init")
biz_cl_driver_main = mRootView.findViewById(R.id.biz_cl_driver_main)
inputPhoneNormal()
initBg()
initListener()
@@ -57,7 +86,7 @@ class LoginFragment : MvpFragment<LoginFragment?, LoginPresenter?>(), ILoginView
}
private fun initListener() {
CallerLogger.d(TAG,"initListener")
CallerLogger.d(TAG, "initListener")
mRootView.isFocusable = true
mRootView.isFocusableInTouchMode = true
mRootView.setOnTouchListener { _, event ->
@@ -76,32 +105,6 @@ class LoginFragment : MvpFragment<LoginFragment?, LoginPresenter?>(), ILoginView
biz_actv_welcome_login_title.setOnClickListener {
continuousClick()
}
biz_cl_driver_main.viewTreeObserver.addOnGlobalLayoutListener(object :OnGlobalLayoutListener{
override fun onGlobalLayout() {
try {
if (biz_cl_driver_main==null) {
}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()
}
}
})
biz_actv_login_get_code.onClick {
mPresenter?.getPhoneCode(biz_ace_login_phone_value.text.toString())
}
@@ -118,9 +121,10 @@ class LoginFragment : MvpFragment<LoginFragment?, LoginPresenter?>(), ILoginView
bv_switch_business.selectBusniess()
true
}
RxUtils.createSubscribe(10_000) {
CallerLogger.d(TAG,"宽度${biz_cl_driver_main.width}----${biz_cl_driver_main.height}----${biz_cl_driver_main.visibility}")
}
}
override fun onDetach() {
super.onDetach()
}
/**
@@ -145,14 +149,24 @@ class LoginFragment : MvpFragment<LoginFragment?, LoginPresenter?>(), ILoginView
biz_ace_login_phone_value.text?.clear()
biz_ace_login_phone_value.setHint(R.string.module_och_taxi_login_phone_error)
context?.let {
biz_ace_login_phone_value.setHintTextColor(ContextCompat.getColor(it, R.color.taxi_EF262C))
biz_ace_login_phone_value.setHintTextColor(
ContextCompat.getColor(
it,
R.color.taxi_EF262C
)
)
biz_ace_login_phone_value.setBackgroundResource(R.drawable.taxi_login_phone_error)
}
}
private fun inputPhoneNormal() {
context?.let {
biz_ace_login_phone_value.setHintTextColor(ContextCompat.getColor(it, R.color.taxi_878890))
biz_ace_login_phone_value.setHintTextColor(
ContextCompat.getColor(
it,
R.color.taxi_878890
)
)
biz_ace_login_phone_value.setBackgroundResource(R.drawable.taxi_login_phone_normal)
}
}
@@ -191,18 +205,20 @@ class LoginFragment : MvpFragment<LoginFragment?, LoginPresenter?>(), ILoginView
}
override fun checkAllEnv(
reason:String
reason: String
) {
// 司机屏不用处理 只处理 后台返回的业务模型就行
}
override fun onResume() {
biz_cl_driver_main?.viewTreeObserver?.addOnGlobalLayoutListener(onlayoutListener)
super.onResume()
CallerLogger.d(TAG,"onResume")
CallerLogger.d(TAG, "onResume")
}
override fun onPause() {
biz_cl_driver_main?.viewTreeObserver?.removeOnGlobalLayoutListener(onlayoutListener)
super.onPause()
CallerLogger.d(TAG,"onPause")
CallerLogger.d(TAG, "onPause")
}
}

View File

@@ -22,6 +22,12 @@ object LoginStatusManager : CallerBase<ILoginCallback>() {
}
throw ClassNotFoundException("没有找到登录Fragment");
}
@JvmStatic
fun resetFragment(){
loginService?.let {
return it.resetFragment()
}
}
@JvmStatic
fun loginOut(mLatitude: Double, mLongitude: Double) {

View File

@@ -9,6 +9,8 @@ interface CommonService : IProvider {
fun getFragment(): Fragment
fun resetFragment(){}
fun getStatusBarView(context: Context): View
fun invokeByName(type:String,value:Any){}

View File

@@ -56,12 +56,14 @@ abstract class FacadeProvider : IMoGoFunctionProvider, ILoginCallback {
val fragment = if (LoginStatusManager.isLogin()) {
val fragment = getFragment()
injectStatusBar()
LoginStatusManager.resetFragment()
fragment
} else {
removeStatusBar()
CallerHmiManager.hideToolsView()
ToggleDebugView.toggleDebugView.dismiss()
SopView.sopView.dismiss()
commonService?.resetFragment()
LoginStatusManager.getFragment()
}

View File

@@ -18,15 +18,21 @@ import com.mogo.och.common.module.biz.provider.CommonServiceImpl
class ShuttleDriverProvider : CommonServiceImpl() {
private val TAG = ShuttleDriverProvider::class.java.simpleName
private lateinit var busFragment: ShuttleFragment
private var busFragment: ShuttleFragment?=null
override fun init(context: Context) {
d(SceneConstant.M_TAXI + TAG, "init")
busFragment = ShuttleFragment()
}
override fun getFragment(): Fragment {
return busFragment
if(busFragment==null){
busFragment = ShuttleFragment()
}
return busFragment!!
}
override fun resetFragment() {
busFragment = null
}
}

View File

@@ -59,10 +59,9 @@ public class BusPresenter extends Presenter<ShuttleFragment>
public BusPresenter(ShuttleFragment view) {
super(view);
//2021.11.1 鹰眼架构整合由IMoGoAutopilotStatusListener逐步替代IMogoAdasOCHCallback接口
OchAutoPilotStatusListenerManager.INSTANCE.addListener(TAG,this);
OrderModel.getInstance().init();
OCHAdasAbilityManager.getInstance().init(AbsMogoApplication.getApp());
LoginStatusManager.INSTANCE.addListener(TAG,this);
}
@Override
@@ -85,6 +84,8 @@ public class BusPresenter extends Presenter<ShuttleFragment>
OrderModel.getInstance().setSlidePanelHideCallback(this);
OrderModel.getInstance().setControllerStatusCallback(this);
OrderModel.getInstance().setAdasStatusCallback(this);
OchAutoPilotStatusListenerManager.INSTANCE.addListener(TAG,this);
LoginStatusManager.INSTANCE.addListener(TAG,this);
}
public void releaseListener() {
@@ -93,6 +94,8 @@ public class BusPresenter extends Presenter<ShuttleFragment>
OrderModel.getInstance().setControllerStatusCallback(null);
OrderModel.getInstance().setAdasStatusCallback(null);
OCHAdasAbilityManager.getInstance().release();
OchAutoPilotStatusListenerManager.INSTANCE.removeListener(TAG);
LoginStatusManager.INSTANCE.removeListener(TAG);
}
public void abortTask() {

View File

@@ -51,6 +51,7 @@ public abstract class Presenter< V extends IView > implements LifecycleObserver
@OnLifecycleEvent( Lifecycle.Event.ON_DESTROY )
public void onDestroy( @NonNull LifecycleOwner owner ) {
this.mView = null;
}
@OnLifecycleEvent( Lifecycle.Event.ON_ANY )