[f2a 登录]
This commit is contained in:
yangyakun
2026-04-22 19:19:53 +08:00
parent bf2bd70538
commit 8755b95e5b
38 changed files with 1149 additions and 369 deletions

View File

@@ -28,8 +28,8 @@ import com.mogo.eagle.core.utilcode.util.GsonUtils
import com.mogo.eagle.core.utilcode.util.TimeUtils import com.mogo.eagle.core.utilcode.util.TimeUtils
import com.mogo.eagle.core.utilcode.util.UiThreadHandler import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.mogo.och.biz.login.callback.ILoginViewCallback import com.mogo.och.biz.login.callback.ILoginViewCallback
import com.mogo.och.biz.login.model.LoginModel
import com.mogo.och.biz.login.bean.LoginInfo import com.mogo.och.biz.login.bean.LoginInfo
import com.mogo.och.biz.login.model.SwitchLoginModel
import com.mogo.och.common.module.biz.lansocket.IOchLanPassengerStatusListener import com.mogo.och.common.module.biz.lansocket.IOchLanPassengerStatusListener
import com.mogo.och.common.module.biz.lansocket.LoginLanPassengerSocket import com.mogo.och.common.module.biz.lansocket.LoginLanPassengerSocket
import com.mogo.och.common.module.biz.login.LoginStatusManager import com.mogo.och.common.module.biz.login.LoginStatusManager
@@ -180,12 +180,12 @@ object LoginServiceManager : IOchLanPassengerStatusListener {
} }
private fun queryLoginStatusByNet() { private fun queryLoginStatusByNet() {
LoginModel.queryCarStatus(false) SwitchLoginModel.queryCarStatus(false)
} }
fun queryLoginStatusByNet(readCatche: Boolean) { fun queryLoginStatusByNet(readCatche: Boolean) {
d(tag, "queryLoginStatusByNet") d(tag, "queryLoginStatusByNet")
LoginModel.queryCarStatus(readCatche) SwitchLoginModel.queryCarStatus(readCatche)
} }
fun loginOut() { fun loginOut() {
@@ -198,7 +198,7 @@ object LoginServiceManager : IOchLanPassengerStatusListener {
FunctionBuildConfig.isOffLine = false FunctionBuildConfig.isOffLine = false
sendLogin2Client(1) sendLogin2Client(1)
} }
LoginModel.logout() SwitchLoginModel.logout()
} }
fun checkAllEnv( fun checkAllEnv(

View File

@@ -0,0 +1,33 @@
package com.mogo.och.biz.login.bean.f2a;
/**
* Created by yangyakun on 2021/8/19
* 通过手机号验证码登录
*/
public class LoginF2aReqBean {
public String phone;
public String mfaCode;
public String sn;
public Location4Login loc;
public LoginF2aReqBean(String phone, String mfaCode, String sn, Location4Login location4Login) {
this.phone = phone;
this.mfaCode = mfaCode;
this.sn = sn;
this.loc = location4Login;
}
public static class Location4Login{
public double lat;
public double lon;
public String coordinateType = "WGS84";
public Location4Login(double lat, double lon,String coordinateType) {
this.lat = lat;
this.lon = lon;
this.coordinateType = coordinateType;
}
}
}

View File

@@ -0,0 +1,18 @@
package com.mogo.och.biz.login.bean.f2a;
/**
* Created by yangyakun on 2021/8/19
* 通过手机号验证码登录
*/
public class LoginReqBean {
public String phone;
public String password;
public String sn;
public LoginReqBean(String phone, String password, String sn) {
this.phone = phone;
this.password = password;
this.sn = sn;
}
}

View File

@@ -0,0 +1,24 @@
package com.mogo.och.biz.login.bean.f2a;
import com.mogo.eagle.core.data.BaseData;
/**
* Created by yangyakun on 2021/8/19
* 通过账号密码登录
*/
public class LoginRespBean extends BaseData {
public Result data;
public static final class Result {
public Long driverId;
public boolean isFirstLogin;
public boolean isPasswordExpired;
public boolean isPasswordExpiringSoon;
public boolean needInitPassword;
public String otpAuthUrl;
public String phone;
public String sn;
}
}

View File

@@ -0,0 +1,18 @@
package com.mogo.och.biz.login.bean.f2a;
/**
* Created by yangyakun on 2021/8/19
* 通过手机号验证码登录
*/
public class RestPwdReqBean {
public Long driverId;
public String newPwd;
public String oldPwd;
public RestPwdReqBean(Long driverId, String newPwd,String oldPwd) {
this.driverId = driverId;
this.newPwd = newPwd;
this.oldPwd = oldPwd;
}
}

View File

@@ -0,0 +1,23 @@
package com.mogo.och.biz.login.bean.f2a;
import com.mogo.eagle.core.data.BaseData;
/**
* Created by yangyakun on 2021/8/19
* 通过账号密码登录
*/
public class RestPwdRespBean extends BaseData {
public Result data;
public static final class Result {
public Long driverId;
public boolean isFirstLogin;
public boolean isPasswordExpired;
public boolean isPasswordExpiringSoon;
public String otpAuthUrl;
public String phone;
public String sn;
}
}

View File

@@ -1,5 +1,10 @@
package com.mogo.och.biz.login.callback; package com.mogo.och.biz.login.callback;
import com.mogo.och.biz.login.bean.f2a.LoginRespBean;
import com.mogo.och.biz.login.bean.f2a.RestPwdRespBean;
import org.jetbrains.annotations.Nullable;
/** /**
* Created on 2021/9/8 * Created on 2021/9/8
* *
@@ -9,5 +14,8 @@ public interface ITaxiLoginCallback {
default void getPhoneCodeSuccess(){} default void getPhoneCodeSuccess(){}
default void netErrorCallback(){} default void netErrorCallback(){}
default void stopAutoLogin(){}
default void loginfirstSuccess(@Nullable LoginRespBean.Result data,String oldPwd){}
default void restPwdSuccess(){}
} }

View File

@@ -0,0 +1,181 @@
package com.mogo.och.biz.login.model
import android.content.Context
import android.net.ConnectivityManager
import android.util.Log
import com.mogo.commons.AbsMogoApplication
import com.mogo.commons.module.intent.IMogoIntentListener
import com.mogo.commons.module.intent.IntentManager
import com.mogo.commons.storage.SharedPrefsMgr
import com.mogo.commons.utils.MogoAnalyticUtils
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsFuncConfigListenerManager
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.Companion.M_OCHCOMMON
import com.mogo.eagle.core.utilcode.util.NetworkUtils
import com.mogo.eagle.core.utilcode.util.StringUtils
import com.mogo.och.biz.R
import com.mogo.och.biz.login.LoginServiceManager
import com.mogo.och.biz.login.bean.DriverStatusQueryRespBean
import com.mogo.och.biz.login.bean.LoginInfo
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.manager.cache.ISpCallback
import com.mogo.och.common.module.manager.cache.OchSPManager
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 io.reactivex.Observable
import io.reactivex.disposables.Disposable
import java.util.concurrent.TimeUnit
open class CommonLoginModel {
protected val TAG = M_OCHCOMMON + this.javaClass.simpleName
protected var mContext: Context? = null
open var iTaxiLoginCallback: ITaxiLoginCallback? = null
private val mNetWorkIntentListener = IMogoIntentListener { intentStr, _ ->
d(TAG, "onIntentReceived = %s", intentStr)
if (ConnectivityManager.CONNECTIVITY_ACTION == intentStr) {
if (NetworkUtils.isConnected(mContext)
&& AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
// 网络链接成功可以先读取本地再获取服务器
queryCarStatus()
}
}
}
private val snChangeListener = object : ISpCallback {
override fun snChange() {
d(TAG, "sn 发生变化${OchSPManager.getSn()}")
if(AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
queryCarStatus(false)
}
}
}
init {
mContext = AbsMogoApplication.getApp()
IntentManager.getInstance()
.registerIntentListener(ConnectivityManager.CONNECTIVITY_ACTION, mNetWorkIntentListener)
}
protected var subscribe: Disposable? = null
protected val loginInfoKey = "LOGININFOKEY"
fun hasInit(): Boolean {
return iTaxiLoginCallback != null
}
fun setiTaxiLoginCallback(iTaxiLoginCallback: ITaxiLoginCallback?) {
d(TAG, "setiTaxiLoginCallback")
OchSPManager.addListener(TAG, snChangeListener)
this.iTaxiLoginCallback = iTaxiLoginCallback
}
fun release() {
d(TAG, "release")
OchSPManager.remove(TAG)
iTaxiLoginCallback = null
}
@Synchronized
private fun go2LoginInfo(data: LoginInfo?, source: String) {
d(TAG, "设置源:${source}")
data?.let {
LoginServiceManager.setLoginInfo(data)
loginSuccess(data)
}
}
/**
* 接单状态和登录状态查询
* 1、司机端登录成功后开启2分钟定时请求登录状态
* 2、对外提供查询登录状态
* 3、网络状态发生变化后查询
* 4、sn 发生变化后查询
* 5、登录成功后主动查询
* 6、错误重试
* 7、错误重试
* 8、登出后重试
*/
fun queryCarStatus(readCatche: Boolean = true) {
mContext?.let {
Log.d(TAG, "设置源:queryCarStatus")
if (readCatche) {
val loginInfo = LoginServiceManager.getLoginInfo()
go2LoginInfo(loginInfo,"缓存获取")
}
OchCommonServiceManager.queryDriverServiceStatus(
it,
object : OchCommonServiceCallback<DriverStatusQueryRespBean> {
override fun onSuccess(data: DriverStatusQueryRespBean) {
val map: MutableMap<String, Any> = HashMap()
map["msg"] = data.toString()
MogoAnalyticUtils.track("QueryCarStatus", map)
go2LoginInfo(data.data, "接口获取")
}
override fun onError() {
val map: MutableMap<String, Any> = HashMap()
map["msg"] = "网络错误"
MogoAnalyticUtils.track("QueryCarStatus", map)
if (!NetworkUtils.isConnected(mContext)) {
ToastCharterUtils.showToastShort(mContext!!.getString(R.string.biz_login_network_error_tip))
} else {
ToastCharterUtils.showToastShort(mContext!!.getString(R.string.biz_login_request_error_tip))
}
// LoginStatusManager.setLoginError(-10012, "网络错误")
LoginStatusManager.setLoginError(-10012, StringUtils.getString(R.string.module_och_network_mistake))
// 依赖参数
subscribe = Observable.timer(5, TimeUnit.SECONDS)
.subscribe { _: Long? -> queryCarStatus(readCatche) }
}
override fun onFail(code: Int, msg: String) {
val map: MutableMap<String, Any> = HashMap()
map["msg"] = msg
map["code"] = code
MogoAnalyticUtils.track("QueryCarStatus", map)
LoginStatusManager.setLoginError(code, "msg:${msg}")
ToastUtilsOch.showWithCodeMessage(code, msg)
// 依赖参数
subscribe = Observable.timer(3, TimeUnit.SECONDS)
.subscribe { _: Long? -> queryCarStatus(readCatche) }
// if (code == OchCommonConst.WAIT_TAKEN) {
//
// } else {
// }
}
})
}
}
fun loginSuccess(data: LoginInfo?) {
d(TAG, "loginSuccess:${LoginServiceManager.isLogin()}")
if (LoginServiceManager.isLogin()) {
CallerDevaToolsFuncConfigListenerManager
SharedPrefsMgr.getInstance().putString("och_account", data?.phone)
} else {
SharedPrefsMgr.getInstance().putString("och_account", "")
}
}
fun gotoOfflineMode() {
FunctionBuildConfig.isOffLine = true
var loginInfo = LoginServiceManager.getLoginInfo()
if(loginInfo==null){
loginInfo = LoginInfo()
}
LoginServiceManager.setLoginInfo(loginInfo)
}
}

View File

@@ -0,0 +1,166 @@
package com.mogo.och.biz.login.model
import android.annotation.SuppressLint
import com.mogo.eagle.core.data.BaseData
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
import com.mogo.eagle.core.utilcode.util.NetworkUtils
import com.mogo.och.biz.R
import com.mogo.och.biz.login.LoginServiceManager
import com.mogo.och.biz.login.bean.LoginInfo
import com.mogo.och.biz.login.bean.TaxiLogoutReqBean
import com.mogo.och.biz.login.bean.f2a.LoginF2aReqBean
import com.mogo.och.biz.login.bean.f2a.LoginRespBean
import com.mogo.och.biz.login.net.OchCommonServiceManager
import com.mogo.och.bridge.autopilot.location.OchLocationManager
import com.mogo.och.common.module.manager.cache.OchSPManager
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
/**
* Created by pangfan on 2021/8/19
*
*
* 网约车 - 出租车业务逻辑处理
*/
@SuppressLint("StaticFieldLeak")
object F2aLoginModel: CommonLoginModel() {
fun gotoLogin(phone: String, pwd: String) {
mContext?.let {
OchCommonServiceManager.gotoLoginBypwd(it, phone, pwd,
object : OchCommonServiceCallback<LoginRespBean> {
override fun onSuccess(data: LoginRespBean?) {
if (null != data && 0 == data.code) {
// 登录成功需要新的值
queryCarStatus(false)
iTaxiLoginCallback?.loginfirstSuccess(data.data,pwd)
} else {
if (data != null) {
ToastCharterUtils.showToastShort(data.msg.toString())
}
}
}
override fun onError() {
if (!NetworkUtils.isConnected(mContext)) {
ToastCharterUtils.showToastShort(mContext?.getString(R.string.biz_login_network_error_tip))
} else {
ToastCharterUtils.showToastShort(mContext?.getString(R.string.biz_login_request_error_tip_unmanned))
}
iTaxiLoginCallback?.netErrorCallback()
}
override fun onFail(code: Int, msg: String) {
ToastUtilsOch.showWithCodeMessage(code, msg)
}
})
}
}
fun gotoLoginByF2aCode(phone: String?, f2aCode: String) {
mContext?.let {
val location = OchLocationManager.getWgs02Location()
val location4Login = LoginF2aReqBean.Location4Login(location.latitude, location.longitude,"WGS84")
OchCommonServiceManager.gotoLoginByf2aCode(it, phone, f2aCode, location4Login,
object : OchCommonServiceCallback<BaseData> {
override fun onSuccess(data: BaseData?) {
if (null != data && 0 == data.code) {
// 登录成功需要新的值
queryCarStatus(false)
} else {
if (data != null) {
ToastCharterUtils.showToastShort(data.msg.toString())
}
}
}
override fun onError() {
if (!NetworkUtils.isConnected(mContext)) {
ToastCharterUtils.showToastShort(mContext?.getString(R.string.biz_login_network_error_tip))
} else {
ToastCharterUtils.showToastShort(mContext?.getString(R.string.biz_login_request_error_tip_unmanned))
}
iTaxiLoginCallback?.netErrorCallback()
}
override fun onFail(code: Int, msg: String) {
ToastUtilsOch.showWithCodeMessage(code, msg)
}
})
}
}
fun gotoRestPwd(driverId:Long,pwd: String,oldPwd:String) {
mContext?.let {
OchCommonServiceManager.gotoRestPwd(it,driverId, pwd,oldPwd,
object : OchCommonServiceCallback<BaseData> {
override fun onSuccess(data: BaseData?) {
if (null != data && 0 == data.code) {
// 登录成功需要新的值
queryCarStatus(false)
iTaxiLoginCallback?.restPwdSuccess()
} else {
if (data != null) {
ToastCharterUtils.showToastShort(data.msg.toString())
}
}
}
override fun onError() {
if (!NetworkUtils.isConnected(mContext)) {
ToastCharterUtils.showToastShort(mContext?.getString(R.string.biz_login_network_error_tip))
} else {
ToastCharterUtils.showToastShort(mContext?.getString(R.string.biz_login_request_error_tip_unmanned))
}
iTaxiLoginCallback?.netErrorCallback()
}
override fun onFail(code: Int, msg: String) {
ToastUtilsOch.showWithCodeMessage(code, msg)
}
})
}
}
@Synchronized
private fun go2LoginInfo(data: LoginInfo?, source: String) {
d(TAG, "设置源:${source}")
data?.let {
LoginServiceManager.setLoginInfo(data)
loginSuccess(data)
}
}
// 登出
fun logout() {
val location4Login = TaxiLogoutReqBean.Location4Login()
OchCommonServiceManager.logout(
mContext!!, location4Login,
object : OchCommonServiceCallback<BaseData> {
override fun onSuccess(data: BaseData?) {
if (null != data && 0 == data.code) {
OchSPManager.remove(loginInfoKey)
// 退出登录成功需要查询新的
queryCarStatus(false)
}
}
override fun onError() {
if (!NetworkUtils.isConnected(mContext)) {
ToastCharterUtils.showToastShort(mContext!!.getString(R.string.biz_login_network_error_tip))
} else {
ToastCharterUtils.showToastShort(mContext!!.getString(R.string.biz_login_request_error_tip))
}
}
override fun onFail(code: Int, msg: String) {
ToastUtilsOch.showWithCodeMessage(code, msg)
}
})
}
}

View File

@@ -45,56 +45,7 @@ import java.util.concurrent.TimeUnit
* 网约车 - 出租车业务逻辑处理 * 网约车 - 出租车业务逻辑处理
*/ */
@SuppressLint("StaticFieldLeak") @SuppressLint("StaticFieldLeak")
object LoginModel { object LoginModel: CommonLoginModel() {
private const val TAG = "${M_OCHCOMMON}LoginModel"
private var mContext: Context? = null
var iTaxiLoginCallback: ITaxiLoginCallback? = null
private var subscribe: Disposable? = null
private val loginInfoKey = "LOGININFOKEY"
private val mNetWorkIntentListener = IMogoIntentListener { intentStr, _ ->
d(TAG, "onIntentReceived = %s", intentStr)
if (ConnectivityManager.CONNECTIVITY_ACTION == intentStr) {
if (NetworkUtils.isConnected(mContext)
&& AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
// 网络链接成功可以先读取本地再获取服务器
queryCarStatus()
}
}
}
private val snChangeListener = object : ISpCallback {
override fun snChange() {
d(TAG, "sn 发生变化${OchSPManager.getSn()}")
if(AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
queryCarStatus(false)
}
}
}
init {
mContext = AbsMogoApplication.getApp()
IntentManager.getInstance()
.registerIntentListener(ConnectivityManager.CONNECTIVITY_ACTION, mNetWorkIntentListener)
}
fun hasInit(): Boolean {
return iTaxiLoginCallback != null
}
fun setiTaxiLoginCallback(iTaxiLoginCallback: ITaxiLoginCallback?) {
d(TAG, "setiTaxiLoginCallback")
OchSPManager.addListener(TAG, snChangeListener)
LoginModel.iTaxiLoginCallback = iTaxiLoginCallback
}
fun release() {
d(TAG, "release")
OchSPManager.remove(TAG)
iTaxiLoginCallback = null
}
/** /**
* 获取手机验证码 * 获取手机验证码
@@ -137,7 +88,7 @@ object LoginModel {
} }
fun gotoLogin(phone: String, code: String, isAutoLoginMode: Boolean) { fun gotoLogin(phone: String, code: String) {
mContext?.let { mContext?.let {
val location = OchLocationManager.getGCJ02Location() val location = OchLocationManager.getGCJ02Location()
val location4Login = TaxiLoginReqBean.Location4Login(location.latitude, location.longitude) val location4Login = TaxiLoginReqBean.Location4Login(location.latitude, location.longitude)
@@ -145,12 +96,7 @@ object LoginModel {
object : OchCommonServiceCallback<TaxiLoginRespBean> { object : OchCommonServiceCallback<TaxiLoginRespBean> {
override fun onSuccess(data: TaxiLoginRespBean?) { override fun onSuccess(data: TaxiLoginRespBean?) {
if (null != data && 0 == data.code) { if (null != data && 0 == data.code) {
// 获取验证码成功 ToastCharterUtils.showToastShort(mContext?.getString(R.string.biz_login_login_success))
if (isAutoLoginMode){
iTaxiLoginCallback?.stopAutoLogin()
}else{
ToastCharterUtils.showToastShort(mContext?.getString(R.string.biz_login_login_success))
}
// 登录成功需要新的值 // 登录成功需要新的值
queryCarStatus(false) queryCarStatus(false)
} else { } else {
@@ -164,12 +110,7 @@ object LoginModel {
if (!NetworkUtils.isConnected(mContext)) { if (!NetworkUtils.isConnected(mContext)) {
ToastCharterUtils.showToastShort(mContext?.getString(R.string.biz_login_network_error_tip)) ToastCharterUtils.showToastShort(mContext?.getString(R.string.biz_login_network_error_tip))
} else { } else {
if (isAutoLoginMode){ ToastCharterUtils.showToastShort(mContext?.getString(R.string.biz_login_request_error_tip_unmanned))
ToastCharterUtils.showToastShort(mContext?.getString(R.string.biz_login_request_error_tip_unmanned))
}else{
ToastCharterUtils.showToastShort(mContext?.getString(R.string.biz_login_request_error_tip))
}
} }
iTaxiLoginCallback?.netErrorCallback() iTaxiLoginCallback?.netErrorCallback()
} }
@@ -181,80 +122,6 @@ object LoginModel {
} }
} }
/**
* 接单状态和登录状态查询
* 1、司机端登录成功后开启2分钟定时请求登录状态
* 2、对外提供查询登录状态
* 3、网络状态发生变化后查询
* 4、sn 发生变化后查询
* 5、登录成功后主动查询
* 6、错误重试
* 7、错误重试
* 8、登出后重试
*/
fun queryCarStatus(readCatche: Boolean = true) {
mContext?.let {
Log.d(TAG, "设置源:queryCarStatus")
if (readCatche) {
val loginInfo = LoginServiceManager.getLoginInfo()
go2LoginInfo(loginInfo,"缓存获取")
}
OchCommonServiceManager.queryDriverServiceStatus(
it,
object : OchCommonServiceCallback<DriverStatusQueryRespBean> {
override fun onSuccess(data: DriverStatusQueryRespBean) {
val map: MutableMap<String, Any> = HashMap()
map["msg"] = data.toString()
MogoAnalyticUtils.track("QueryCarStatus", map)
go2LoginInfo(data.data, "接口获取")
}
override fun onError() {
val map: MutableMap<String, Any> = HashMap()
map["msg"] = "网络错误"
MogoAnalyticUtils.track("QueryCarStatus", map)
if (!NetworkUtils.isConnected(mContext)) {
ToastCharterUtils.showToastShort(mContext!!.getString(R.string.biz_login_network_error_tip))
} else {
ToastCharterUtils.showToastShort(mContext!!.getString(R.string.biz_login_request_error_tip))
}
// LoginStatusManager.setLoginError(-10012, "网络错误")
LoginStatusManager.setLoginError(-10012, StringUtils.getString(R.string.module_och_network_mistake))
// 依赖参数
subscribe = Observable.timer(5, TimeUnit.SECONDS)
.subscribe { _: Long? -> queryCarStatus(readCatche) }
}
override fun onFail(code: Int, msg: String) {
val map: MutableMap<String, Any> = HashMap()
map["msg"] = msg
map["code"] = code
MogoAnalyticUtils.track("QueryCarStatus", map)
LoginStatusManager.setLoginError(code, "msg:${msg}")
ToastUtilsOch.showWithCodeMessage(code, msg)
// 依赖参数
subscribe = Observable.timer(3, TimeUnit.SECONDS)
.subscribe { _: Long? -> queryCarStatus(readCatche) }
// if (code == OchCommonConst.WAIT_TAKEN) {
//
// } else {
// }
}
})
}
}
@Synchronized
private fun go2LoginInfo(data: LoginInfo?, source: String) {
d(TAG, "设置源:${source}")
data?.let {
LoginServiceManager.setLoginInfo(data)
loginSuccess(data)
}
}
// 登出 // 登出
fun logout() { fun logout() {
val location4Login = TaxiLogoutReqBean.Location4Login() val location4Login = TaxiLogoutReqBean.Location4Login()
@@ -283,23 +150,4 @@ object LoginModel {
}) })
} }
fun loginSuccess(data: LoginInfo?) {
d(TAG, "loginSuccess:${LoginServiceManager.isLogin()}")
if (LoginServiceManager.isLogin()) {
SharedPrefsMgr.getInstance().putString("och_account", data?.phone)
} else {
SharedPrefsMgr.getInstance().putString("och_account", "")
}
}
fun gotoOfflineMode() {
FunctionBuildConfig.isOffLine = true
var loginInfo = LoginServiceManager.getLoginInfo()
if(loginInfo==null){
loginInfo = LoginInfo()
}
LoginServiceManager.setLoginInfo(loginInfo)
}
} }

View File

@@ -0,0 +1,28 @@
package com.mogo.och.biz.login.model
import com.mogo.och.common.module.manager.EnvManager
object SwitchLoginModel {
fun logout() {
if (EnvManager.isPhoneCodeMode()) {
F2aLoginModel.logout()
}else{
LoginModel.logout()
}
}
fun release() {
LoginModel.release()
F2aLoginModel.release()
}
fun queryCarStatus(readCatche:Boolean){
if (EnvManager.isPhoneCodeMode()) {
F2aLoginModel.queryCarStatus(readCatche)
}else{
LoginModel.queryCarStatus(readCatche)
}
}
}

View File

@@ -2,25 +2,28 @@ package com.mogo.och.biz.login.net
import android.content.Context import android.content.Context
import com.mogo.cloud.passport.MoGoAiCloudClientConfig import com.mogo.cloud.passport.MoGoAiCloudClientConfig
import com.mogo.commons.env.ProjectUtils
import com.mogo.commons.storage.SharedPrefsMgr import com.mogo.commons.storage.SharedPrefsMgr
import com.mogo.och.biz.login.bean.DriverStatusQueryRespBean
import com.mogo.och.biz.login.bean.TaxiLoginReqBean
import com.mogo.eagle.core.data.BaseData import com.mogo.eagle.core.data.BaseData
import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.network.MoGoRetrofitFactory import com.mogo.eagle.core.network.MoGoRetrofitFactory
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
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.TaxiLoginRespBean
import com.mogo.och.biz.login.bean.TaxiLoginSmsReqBean import com.mogo.och.biz.login.bean.TaxiLoginSmsReqBean
import com.mogo.och.biz.login.bean.TaxiLogoutReqBean import com.mogo.och.biz.login.bean.TaxiLogoutReqBean
import com.mogo.och.biz.login.bean.f2a.LoginF2aReqBean
import com.mogo.och.biz.login.bean.f2a.LoginReqBean
import com.mogo.och.biz.login.bean.f2a.LoginRespBean
import com.mogo.och.biz.login.bean.f2a.RestPwdReqBean
import com.mogo.och.common.module.biz.lansocket.LoginLanPassengerSocket import com.mogo.och.common.module.biz.lansocket.LoginLanPassengerSocket
import com.mogo.och.common.module.constant.OchCommonConst import com.mogo.och.common.module.constant.OchCommonConst
import com.mogo.och.common.module.manager.cache.OchSPManager
import com.mogo.och.common.module.network.OchCommonServiceCallback import com.mogo.och.common.module.network.OchCommonServiceCallback
import com.mogo.och.common.module.network.OchCommonSubscribeImpl import com.mogo.och.common.module.network.OchCommonSubscribeImpl
import com.mogo.och.common.module.network.interceptor.transformTry import com.mogo.och.common.module.network.interceptor.transformTry
import com.mogo.commons.env.ProjectUtils
import com.mogo.och.common.module.manager.cache.OchSPManager
import com.mogo.och.common.module.utils.RxUtils
object OchCommonServiceManager { object OchCommonServiceManager {
@@ -168,4 +171,64 @@ object OchCommonServiceManager {
} }
} }
/**
* 通过密码半登录
* @param context
* @param callback
*/
@JvmStatic
fun gotoLoginBypwd(
context: Context, phone: String?, pwd: String?,
callback: OchCommonServiceCallback<LoginRespBean>?
) {
CallerLogger.d(TAG, "gotoLoginBycode:通过手机验证码登录:${phone}---${pwd}")
val sn = OchSPManager.getSn()
ochLoginServiceSaasEh.gotoLoginBypwd(
MoGoAiCloudClientConfig.getInstance().serviceAppId,
SharedPrefsMgr.getInstance().token,
LoginReqBean(phone, pwd, sn)
).transformTry().subscribe(OchCommonSubscribeImpl(context, callback, "login"))
}
/**
* 重新设置密码
* @param context
* @param callback
*/
@JvmStatic
fun gotoRestPwd(
context: Context, driverId: Long?, pwd: String?,oldPwd:String,
callback: OchCommonServiceCallback<BaseData>?
) {
CallerLogger.d(TAG, "gotoLoginBycode:重置密码")
val sn = OchSPManager.getSn()
ochLoginServiceSaasEh.gotoresetPwd(
MoGoAiCloudClientConfig.getInstance().serviceAppId,
SharedPrefsMgr.getInstance().token,
RestPwdReqBean(driverId, pwd,oldPwd)
).transformTry().subscribe(OchCommonSubscribeImpl(context, callback, "gotoRestPwd"))
}
/**
* 重新设置密码
* @param context
* @param callback
*/
@JvmStatic
fun gotoLoginByf2aCode(
context: Context, phone: String?, mfaCode: String?,
location4Login: LoginF2aReqBean.Location4Login,
callback: OchCommonServiceCallback<BaseData>?
) {
CallerLogger.d(TAG, "gotoLoginBycode:重置密码")
val sn = OchSPManager.getSn()
ochLoginServiceSaasEh.gotoLogByf2aCode(
MoGoAiCloudClientConfig.getInstance().serviceAppId,
SharedPrefsMgr.getInstance().token,
LoginF2aReqBean(phone, mfaCode,sn,location4Login)
).transformTry().subscribe(OchCommonSubscribeImpl(context, callback, "gotoRestPwd"))
}
} }

View File

@@ -6,6 +6,10 @@ import com.mogo.och.biz.login.bean.TaxiLoginReqBean;
import com.mogo.och.biz.login.bean.TaxiLoginRespBean; import com.mogo.och.biz.login.bean.TaxiLoginRespBean;
import com.mogo.och.biz.login.bean.TaxiLoginSmsReqBean; import com.mogo.och.biz.login.bean.TaxiLoginSmsReqBean;
import com.mogo.och.biz.login.bean.TaxiLogoutReqBean; import com.mogo.och.biz.login.bean.TaxiLogoutReqBean;
import com.mogo.och.biz.login.bean.f2a.LoginF2aReqBean;
import com.mogo.och.biz.login.bean.f2a.LoginReqBean;
import com.mogo.och.biz.login.bean.f2a.LoginRespBean;
import com.mogo.och.biz.login.bean.f2a.RestPwdReqBean;
import io.reactivex.Observable; import io.reactivex.Observable;
import retrofit2.http.Body; import retrofit2.http.Body;
@@ -63,4 +67,45 @@ interface OchLoginServiceSaasEhApi {
Observable<DriverStatusQueryRespBean> queryDriverServiceStatusAndLoginStatus(@Header("appId") String appId Observable<DriverStatusQueryRespBean> queryDriverServiceStatusAndLoginStatus(@Header("appId") String appId
, @Header("ticket") String ticket, @Query("sn") String sn); , @Header("ticket") String ticket, @Query("sn") String sn);
/**
* 通过验证码登录
*
* @param appId
* @param ticket
* @param data
* @return
*/
@Headers({"Content-type:application/json;charset=UTF-8"})
@POST("/l4r-vehicle/api/tnt/driver/auth/v2/loginNext")
Observable<LoginRespBean> gotoLoginBypwd(@Header("appId") String appId
, @Header("ticket") String ticket, @Body LoginReqBean data);
/**
* 通过验证码登录
*
* @param appId
* @param ticket
* @param data
* @return
*/
@Headers({"Content-type:application/json;charset=UTF-8"})
@POST("/l4r-vehicle/api/tnt/driver/auth/v2/resetPwd")
Observable<BaseData> gotoresetPwd(@Header("appId") String appId
, @Header("ticket") String ticket, @Body RestPwdReqBean data);
/**
* 通过验证码登录
*
* @param appId
* @param ticket
* @param data
* @return
*/
@Headers({"Content-type:application/json;charset=UTF-8"})
@POST("/l4r-vehicle/api/tnt/driver/auth/v2/login")
Observable<BaseData> gotoLogByf2aCode(@Header("appId") String appId
, @Header("ticket") String ticket, @Body LoginF2aReqBean data);
} }

View File

@@ -3,8 +3,6 @@ package com.mogo.och.biz.login.presenter
import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.LifecycleOwner
import com.mogo.commons.mvp.Presenter import com.mogo.commons.mvp.Presenter
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.och.biz.login.callback.ITaxiLoginCallback
import com.mogo.och.biz.login.model.LoginModel
import com.mogo.och.biz.login.ui.LoginPassengerFragment import com.mogo.och.biz.login.ui.LoginPassengerFragment
import com.mogo.och.common.module.manager.loop.BizLoopManager import com.mogo.och.common.module.manager.loop.BizLoopManager
import com.mogo.och.common.module.manager.loop.LoopInfo import com.mogo.och.common.module.manager.loop.LoopInfo
@@ -15,7 +13,7 @@ import com.mogo.och.common.module.manager.loop.LoopInfo
* *
* 描述 * 描述
*/ */
class LoginPassengerPresenter(view: LoginPassengerFragment?) : Presenter<LoginPassengerFragment?>(view), ITaxiLoginCallback { class LoginPassengerPresenter(view: LoginPassengerFragment?) : Presenter<LoginPassengerFragment?>(view) {
private val TAG = LoginPassengerPresenter::class.java.simpleName private val TAG = LoginPassengerPresenter::class.java.simpleName
@@ -25,7 +23,6 @@ class LoginPassengerPresenter(view: LoginPassengerFragment?) : Presenter<LoginPa
} }
private fun initListeners() { private fun initListeners() {
LoginModel.setiTaxiLoginCallback(this)
BizLoopManager.setLoopFunction(TAG, LoopInfo(2,::showStatus)) BizLoopManager.setLoopFunction(TAG, LoopInfo(2,::showStatus))
} }

View File

@@ -6,14 +6,10 @@ import com.mogo.eagle.core.utilcode.mogo.Product
import com.mogo.eagle.core.utilcode.mogo.Vehicle import com.mogo.eagle.core.utilcode.mogo.Vehicle
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_OCHCOMMON import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_OCHCOMMON
import com.mogo.och.biz.login.callback.ITaxiLoginCallback
import com.mogo.och.biz.login.ui.LoginFragment import com.mogo.och.biz.login.ui.LoginFragment
import com.mogo.och.biz.login.model.LoginModel import com.mogo.och.biz.login.model.SwitchLoginModel
import com.mogo.och.common.module.biz.login.ILoginCallback 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
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager
import io.reactivex.disposables.Disposable
import java.util.concurrent.atomic.AtomicBoolean
/** /**
* @author congtaowang * @author congtaowang
@@ -21,22 +17,17 @@ import java.util.concurrent.atomic.AtomicBoolean
* *
* 描述 * 描述
*/ */
class LoginPresenter(view: LoginFragment?) : Presenter<LoginFragment?>(view), ITaxiLoginCallback, class LoginPresenter(view: LoginFragment?) : Presenter<LoginFragment?>(view),
ILoginCallback { ILoginCallback {
private var countDownDisposable: Disposable? = null
private val TAG = M_OCHCOMMON+LoginPresenter::class.java.simpleName private val TAG = M_OCHCOMMON+LoginPresenter::class.java.simpleName
private var autoLoginDisposable: Disposable? = null
private var isAutoLoginMode = AtomicBoolean(false) // 标记是否处于自动登录模式
init { init {
initListeners() initListeners()
CallerLogger.d(TAG, "登录-Init") CallerLogger.d(TAG, "登录-Init")
} }
private fun initListeners() { private fun initListeners() {
LoginModel.setiTaxiLoginCallback(this)
LoginStatusManager.addListener(TAG,this) LoginStatusManager.addListener(TAG,this)
} }
@@ -53,33 +44,10 @@ class LoginPresenter(view: LoginFragment?) : Presenter<LoginFragment?>(view), IT
CallerLogger.d(TAG, "登录-初始化") CallerLogger.d(TAG, "登录-初始化")
} }
override fun onDestroy(owner: LifecycleOwner) { override fun onDestroy(owner: LifecycleOwner) {
super.onDestroy(owner) super.onDestroy(owner)
LoginModel.release() SwitchLoginModel.release()
countDownDisposable?.let {
if (!it.isDisposed) {
it.dispose()
}
}
stopAutoLogin()
} }
override fun stopAutoLogin() {
isAutoLoginMode.set(false)
autoLoginDisposable?.let {
if (!it.isDisposed) {
it.dispose()
}
}
autoLoginDisposable = null
OchChainLogManager.writeChainLog(TAG, "登录成功,停止自动登录循环")
}
override fun netErrorCallback() {
if (!isAutoLoginMode.get()) {
mView?.showLoginOffLineModel()
}
}
} }

View File

@@ -33,9 +33,6 @@ import com.mogo.och.biz.R
import com.mogo.och.biz.login.LoginConst import com.mogo.och.biz.login.LoginConst
import com.mogo.och.biz.login.callback.ILoginViewCallback import com.mogo.och.biz.login.callback.ILoginViewCallback
import com.mogo.och.biz.login.presenter.LoginPresenter import com.mogo.och.biz.login.presenter.LoginPresenter
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager
import com.mogo.och.common.module.utils.ResourcesUtils
import com.mogo.och.common.module.wigets.dialog.CommonDialogStatus
import com.mogo.skin.utils.SkinResources import com.mogo.skin.utils.SkinResources
import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder
import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack
@@ -206,14 +203,6 @@ class LoginFragment : MvpFragment<LoginFragment?, LoginPresenter?>(), ILoginView
biz_login_svp?.setBackgroundResource(R.drawable.biz_login_bg_bus_end) biz_login_svp?.setBackgroundResource(R.drawable.biz_login_bg_bus_end)
} }
} }
// if (AppIdentityModeUtils.getCockpitType() == CockpitType.UNMANNED) {
// cl_welcome_info?.visibility = View.VISIBLE
// UiThreadHandler.postDelayed({
// mPresenter?.autoLogin()
// }, 2_000, UiThreadHandler.MODE.QUEUE)
// } else {
// cl_login_info?.visibility = View.VISIBLE
// }
login_view_info?.visibility = View.VISIBLE login_view_info?.visibility = View.VISIBLE
}else{ }else{
viewColdStart.setColdStartResultListener(object: ColdStartView.ColdStartResultListener{ viewColdStart.setColdStartResultListener(object: ColdStartView.ColdStartResultListener{
@@ -302,26 +291,4 @@ class LoginFragment : MvpFragment<LoginFragment?, LoginPresenter?>(), ILoginView
viewColdStart.setColdStartResultListener(null) viewColdStart.setColdStartResultListener(null)
} }
fun showLoginOffLineModel() {
context?.let {
val builder = CommonDialogStatus.Builder()
val closeLineConfirmDialog = builder
.title(ResourcesUtils.getString(R.string.biz_login_net_error_title))
.tips(ResourcesUtils.getString(R.string.biz_login_net_error_tip))
.confirmStr(ResourcesUtils.getString(R.string.biz_login_offline_login))
.status(CommonDialogStatus.Status.neterror)
.build(it)
closeLineConfirmDialog.setClickListener(object : CommonDialogStatus.ClickListener {
override fun confirm() {
login_view_info?.gotoLogin4Fragment(LoginConst.OFFLINEPHONE, LoginConst.OFFLINECODE)
}
override fun cancel() {
closeLineConfirmDialog.dismiss()
}
})
closeLineConfirmDialog.show()
}
}
} }

View File

@@ -13,11 +13,14 @@ import com.mogo.eagle.core.utilcode.kotlin.onClick
import com.mogo.eagle.core.utilcode.util.ActivityUtils import com.mogo.eagle.core.utilcode.util.ActivityUtils
import com.mogo.eagle.core.utilcode.util.KeyboardUtils import com.mogo.eagle.core.utilcode.util.KeyboardUtils
import com.mogo.och.biz.R import com.mogo.och.biz.R
import com.mogo.och.biz.login.LoginConst
import com.mogo.och.biz.login.ui.LoginFragment import com.mogo.och.biz.login.ui.LoginFragment
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager
import com.mogo.och.common.module.utils.ResourcesUtils
import com.mogo.och.common.module.wigets.dialog.CommonDialogStatus
import kotlinx.android.synthetic.main.biz_login_view_old.view.biz_acbtn_login import kotlinx.android.synthetic.main.biz_login_view_old.view.biz_acbtn_login
import kotlinx.android.synthetic.main.biz_login_view_old.view.biz_acet_phone_code_value
import kotlinx.android.synthetic.main.biz_login_view_old.view.biz_ace_login_phone_value import kotlinx.android.synthetic.main.biz_login_view_old.view.biz_ace_login_phone_value
import kotlinx.android.synthetic.main.biz_login_view_old.view.biz_acet_phone_code_value
import kotlinx.android.synthetic.main.biz_login_view_old.view.biz_actv_login_get_code import kotlinx.android.synthetic.main.biz_login_view_old.view.biz_actv_login_get_code
import kotlinx.android.synthetic.main.biz_login_view_old.view.biz_actv_welcome_login_title import kotlinx.android.synthetic.main.biz_login_view_old.view.biz_actv_welcome_login_title
@@ -107,10 +110,6 @@ class LoginView : ConstraintLayout, LoginViewModel.IErrorInfoViewCallback {
} }
} }
fun gotoLogin4Fragment(phone: String, code: String){
viewModel?.gotoLogin(phone, code)
}
override fun onAttachedToWindow() { override fun onAttachedToWindow() {
super.onAttachedToWindow() super.onAttachedToWindow()
@@ -128,10 +127,6 @@ class LoginView : ConstraintLayout, LoginViewModel.IErrorInfoViewCallback {
} }
fun getBottomInfo(){
}
init { init {
try { try {
initView() initView()
@@ -170,4 +165,26 @@ class LoginView : ConstraintLayout, LoginViewModel.IErrorInfoViewCallback {
} }
} }
override fun showLoginOffLineModel() {
context?.let {
val builder = CommonDialogStatus.Builder()
val closeLineConfirmDialog = builder
.title(ResourcesUtils.getString(R.string.biz_login_net_error_title))
.tips(ResourcesUtils.getString(R.string.biz_login_net_error_tip))
.confirmStr(ResourcesUtils.getString(R.string.biz_login_offline_login))
.status(CommonDialogStatus.Status.neterror)
.build(it)
closeLineConfirmDialog.setClickListener(object : CommonDialogStatus.ClickListener {
override fun confirm() {
viewModel?.gotoLogin(LoginConst.OFFLINEPHONE, LoginConst.OFFLINECODE)
}
override fun cancel() {
closeLineConfirmDialog.dismiss()
}
})
closeLineConfirmDialog.show()
}
}
} }

View File

@@ -27,11 +27,6 @@ class LoginViewModel : ViewModel(), ITaxiLoginCallback, ILoginCallback {
private var countDownDisposable: Disposable? = null private var countDownDisposable: Disposable? = null
init {
}
fun setDistanceCallback(viewCallback: IErrorInfoViewCallback) { fun setDistanceCallback(viewCallback: IErrorInfoViewCallback) {
this.viewCallback = viewCallback this.viewCallback = viewCallback
initListeners() initListeners()
@@ -69,7 +64,7 @@ class LoginViewModel : ViewModel(), ITaxiLoginCallback, ILoginCallback {
gotoOfflineMode() gotoOfflineMode()
return return
} }
LoginModel.gotoLogin(phone, code, false) LoginModel.gotoLogin(phone, code)
viewCallback?.closeSoftInput() viewCallback?.closeSoftInput()
} }
@@ -112,10 +107,16 @@ class LoginViewModel : ViewModel(), ITaxiLoginCallback, ILoginCallback {
LoginModel.gotoOfflineMode() LoginModel.gotoOfflineMode()
} }
override fun netErrorCallback() {
super.netErrorCallback()
viewCallback?.showLoginOffLineModel()
}
interface IErrorInfoViewCallback { interface IErrorInfoViewCallback {
fun inputPhoneError() fun inputPhoneError()
fun closeSoftInput() fun closeSoftInput()
fun setCountDownText(text: String, enable: Boolean) fun setCountDownText(text: String, enable: Boolean)
fun showLoginOffLineModel()
} }

View File

@@ -2,6 +2,8 @@ package com.mogo.och.biz.login.ui.loginf2a
import android.content.Context import android.content.Context
import android.os.SystemClock import android.os.SystemClock
import android.text.Editable
import android.text.TextWatcher
import android.util.AttributeSet import android.util.AttributeSet
import android.view.LayoutInflater import android.view.LayoutInflater
import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintLayout
@@ -11,15 +13,35 @@ import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.findViewTreeViewModelStoreOwner import androidx.lifecycle.findViewTreeViewModelStoreOwner
import com.mogo.eagle.core.utilcode.kotlin.onClick import com.mogo.eagle.core.utilcode.kotlin.onClick
import com.mogo.eagle.core.utilcode.util.ActivityUtils import com.mogo.eagle.core.utilcode.util.ActivityUtils
import com.mogo.eagle.core.utilcode.util.ImageUtils
import com.mogo.eagle.core.utilcode.util.KeyboardUtils import com.mogo.eagle.core.utilcode.util.KeyboardUtils
import com.mogo.och.biz.R import com.mogo.och.biz.R
import com.mogo.och.biz.login.ui.LoginFragment import com.mogo.och.biz.login.ui.LoginFragment
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager import com.mogo.och.common.module.utils.createQRCode
import kotlinx.android.synthetic.main.biz_login_view_old.view.biz_acbtn_login import com.mogo.och.common.module.utils.createQRCodeWithPicture
import kotlinx.android.synthetic.main.biz_login_view_old.view.biz_acet_phone_code_value import com.mogo.skin.utils.SkinResources
import kotlinx.android.synthetic.main.biz_login_view_old.view.biz_ace_login_phone_value import kotlinx.android.synthetic.main.biz_login_view_f2a.view.acet_f2a_code
import kotlinx.android.synthetic.main.biz_login_view_old.view.biz_actv_login_get_code import kotlinx.android.synthetic.main.biz_login_view_f2a.view.acet_input_number_1
import kotlinx.android.synthetic.main.biz_login_view_old.view.biz_actv_welcome_login_title import kotlinx.android.synthetic.main.biz_login_view_f2a.view.acet_input_number_2
import kotlinx.android.synthetic.main.biz_login_view_f2a.view.acet_input_number_3
import kotlinx.android.synthetic.main.biz_login_view_f2a.view.acet_input_number_4
import kotlinx.android.synthetic.main.biz_login_view_f2a.view.acet_input_number_5
import kotlinx.android.synthetic.main.biz_login_view_f2a.view.acet_input_number_6
import kotlinx.android.synthetic.main.biz_login_view_f2a.view.aciv_get_f2a_code
import kotlinx.android.synthetic.main.biz_login_view_f2a.view.biz_acbtn_f2a_login_first
import kotlinx.android.synthetic.main.biz_login_view_f2a.view.biz_acbtn_f2a_login_normal
import kotlinx.android.synthetic.main.biz_login_view_f2a.view.biz_acbtn_login
import kotlinx.android.synthetic.main.biz_login_view_f2a.view.biz_acbtn_reset_passwrod
import kotlinx.android.synthetic.main.biz_login_view_f2a.view.biz_ace_login_phone_value
import kotlinx.android.synthetic.main.biz_login_view_f2a.view.biz_acet_phone_pwd_value
import kotlinx.android.synthetic.main.biz_login_view_f2a.view.biz_actv_welcome_login_title
import kotlinx.android.synthetic.main.biz_login_view_f2a.view.biz_reset_password_first_value
import kotlinx.android.synthetic.main.biz_login_view_f2a.view.biz_reset_password_secode_value
import kotlinx.android.synthetic.main.biz_login_view_f2a.view.group_bind_sec_code
import kotlinx.android.synthetic.main.biz_login_view_f2a.view.group_f2a_login
import kotlinx.android.synthetic.main.biz_login_view_f2a.view.group_password_login
import kotlinx.android.synthetic.main.biz_login_view_f2a.view.group_reset_password
import me.jessyan.autosize.utils.AutoSizeUtils
class LoginF2aView : ConstraintLayout, LoginF2aViewModel.IErrorInfoViewCallback { class LoginF2aView : ConstraintLayout, LoginF2aViewModel.IErrorInfoViewCallback {
@@ -52,20 +74,24 @@ class LoginF2aView : ConstraintLayout, LoginF2aViewModel.IErrorInfoViewCallback
private fun initListener(){ private fun initListener(){
biz_acbtn_login.onClick { biz_acbtn_login.onClick {
val phone = biz_ace_login_phone_value.text.toString() val phone = biz_ace_login_phone_value.text.toString()
val code = biz_acet_phone_code_value.text.toString() val pwd = biz_acet_phone_pwd_value.text.toString()
viewModel?.gotoLogin(phone, code) viewModel?.gotoLogin(phone, pwd)
} }
biz_acbtn_reset_passwrod.onClick {
val pwd = biz_reset_password_first_value.text.toString()
val pwdSecod = biz_reset_password_secode_value.text.toString()
viewModel?.gotoRestPwd(pwd,pwdSecod)
}
biz_acbtn_f2a_login_first.onClick {
val f2aCode = acet_f2a_code.text.toString()
viewModel?.gotoLogin4F2a(f2aCode)
}
biz_actv_welcome_login_title.setOnClickListener { biz_actv_welcome_login_title.setOnClickListener {
continuousClick() continuousClick()
} }
biz_actv_login_get_code.setOnClickListener {
OchChainLogManager.writeChainLog("登录页面","点击获取验证码")
if(viewModel==null){
OchChainLogManager.writeChainLog("司机登录页面","mPresenter=${viewModel}")
}else{
viewModel?.getPhoneCode(biz_ace_login_phone_value.text.toString())
}
}
biz_ace_login_phone_value.addTextChangedListener { biz_ace_login_phone_value.addTextChangedListener {
it?.let { itEditable -> it?.let { itEditable ->
@@ -74,6 +100,43 @@ class LoginF2aView : ConstraintLayout, LoginF2aViewModel.IErrorInfoViewCallback
} }
} }
} }
val etList = listOf(acet_input_number_1, acet_input_number_2, acet_input_number_3, acet_input_number_4, acet_input_number_5, acet_input_number_6)
etList.forEachIndexed { index, editText ->
editText.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {}
override fun afterTextChanged(s: Editable?) {
if (!s.isNullOrEmpty()) {
// 输入了内容,跳到下一格
if (index < etList.size - 1) {
etList[index + 1].requestFocus()
} else {
// 最后一格,收集验证码
val code = etList.joinToString("") { it.text.toString() }
}
} else {
// 删除了内容,跳到上一格
if (index > 0) {
etList[index - 1].requestFocus()
}
}
}
})
}
biz_acbtn_f2a_login_normal.onClick {
val stringBuilder = StringBuilder()
etList.forEach {
stringBuilder.append(it.text)
}
if(stringBuilder.length==6){
viewModel?.gotoLogin4F2a(stringBuilder.toString())
}
}
} }
companion object { companion object {
@@ -91,7 +154,7 @@ class LoginF2aView : ConstraintLayout, LoginF2aViewModel.IErrorInfoViewCallback
mHits[mHits.size - 1] = SystemClock.uptimeMillis() mHits[mHits.size - 1] = SystemClock.uptimeMillis()
if (mHits[0] >= (SystemClock.uptimeMillis() - DURATION)) { if (mHits[0] >= (SystemClock.uptimeMillis() - DURATION)) {
mHits = LongArray(COUNTS) //重新初始化数组 mHits = LongArray(COUNTS) //重新初始化数组
viewModel?.gotoLogin("13288888888", "8888") viewModel?.gotoLogin4Code("13288888888", "8888")
} }
} }
@@ -122,6 +185,11 @@ class LoginF2aView : ConstraintLayout, LoginF2aViewModel.IErrorInfoViewCallback
viewModel?.setDistanceCallback(this) viewModel?.setDistanceCallback(this)
} }
override fun onDetachedFromWindow() {
super.onDetachedFromWindow()
}
override fun onVisibilityAggregated(isVisible: Boolean) { override fun onVisibilityAggregated(isVisible: Boolean) {
super.onVisibilityAggregated(isVisible) super.onVisibilityAggregated(isVisible)
@@ -160,14 +228,42 @@ class LoginF2aView : ConstraintLayout, LoginF2aViewModel.IErrorInfoViewCallback
KeyboardUtils.hideSoftInput(ActivityUtils.getTopActivity()) KeyboardUtils.hideSoftInput(ActivityUtils.getTopActivity())
} }
override fun setCountDownText(text: String, enable: Boolean) { override fun showLoginView() {
if (enable) { group_password_login.visibility = VISIBLE
biz_actv_login_get_code.setText(R.string.biz_login_get_code) group_reset_password.visibility = GONE
biz_actv_login_get_code.isEnabled = true group_bind_sec_code.visibility = GONE
} else { group_f2a_login.visibility = GONE
biz_actv_login_get_code.text = text }
biz_actv_login_get_code.isEnabled = false
override fun showRestPassword() {
group_password_login.visibility = GONE
group_reset_password.visibility = VISIBLE
group_bind_sec_code.visibility = GONE
group_f2a_login.visibility = GONE
}
override fun showF2aLoginViewSecod() {
group_password_login.visibility = GONE
group_reset_password.visibility = GONE
group_bind_sec_code.visibility = GONE
group_f2a_login.visibility = VISIBLE
}
override fun showQrLoginView(otpAuthUrl: String?) {
group_password_login.visibility = GONE
group_reset_password.visibility = GONE
group_bind_sec_code.visibility = VISIBLE
group_f2a_login.visibility = GONE
otpAuthUrl?.let {
val qrCenterLogoDrawable =
SkinResources.getInstance().getDrawable(R.drawable.icon_qr_center_logo)
val qrCenterLogoBitmap = ImageUtils.drawable2Bitmap(qrCenterLogoDrawable)
val bmQr = createQRCodeWithPicture(qrCenterLogoBitmap,otpAuthUrl, AutoSizeUtils.dp2px(context, 360f),
AutoSizeUtils.dp2px(context, 360f), true
)
aciv_get_f2a_code.setImageBitmap(bmQr)
} }
} }
} }

View File

@@ -1,32 +1,31 @@
package com.mogo.och.biz.login.ui.loginf2a package com.mogo.och.biz.login.ui.loginf2a
import androidx.lifecycle.ViewModel 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.CallerLogger
import com.mogo.eagle.core.utilcode.util.Md5Util
import com.mogo.eagle.core.utilcode.util.RegexUtils import com.mogo.eagle.core.utilcode.util.RegexUtils
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.mogo.och.biz.R import com.mogo.och.biz.R
import com.mogo.och.biz.login.LoginConst import com.mogo.och.biz.login.LoginConst
import com.mogo.och.biz.login.bean.f2a.LoginRespBean
import com.mogo.och.biz.login.bean.f2a.RestPwdRespBean
import com.mogo.och.biz.login.callback.ITaxiLoginCallback import com.mogo.och.biz.login.callback.ITaxiLoginCallback
import com.mogo.och.biz.login.model.F2aLoginModel
import com.mogo.och.biz.login.model.LoginModel import com.mogo.och.biz.login.model.LoginModel
import com.mogo.och.biz.login.ui.debugview.BusinessViewModel
import com.mogo.och.common.module.biz.login.ILoginCallback 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
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager import com.mogo.och.common.module.utils.CallerLoggerUtils
import com.mogo.och.common.module.utils.ResourcesUtils
import com.mogo.och.common.module.wigets.toast.ToastCharterUtils import com.mogo.och.common.module.wigets.toast.ToastCharterUtils
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 LoginF2aViewModel : ViewModel(), ITaxiLoginCallback, ILoginCallback { class LoginF2aViewModel : ViewModel(), ITaxiLoginCallback, ILoginCallback {
private val TAG = BusinessViewModel::class.java.simpleName private val TAG = LoginF2aViewModel::class.java.simpleName
private var viewCallback: IErrorInfoViewCallback? = null private var viewCallback: IErrorInfoViewCallback? = null
private var countDownDisposable: Disposable? = null private var loginRespBean: LoginRespBean.Result?=null;
private var oldPwd: String?=null;
init { init {
@@ -39,83 +38,122 @@ class LoginF2aViewModel : ViewModel(), ITaxiLoginCallback, ILoginCallback {
override fun onCleared() { override fun onCleared() {
super.onCleared() super.onCleared()
CallerLogger.d(TAG,"LoginF2aViewModel:onCleared")
this.viewCallback = null this.viewCallback = null
countDownDisposable?.let { F2aLoginModel.setiTaxiLoginCallback(null)
if (!it.isDisposed) { LoginStatusManager.removeListener(TAG)
it.dispose() }
private fun initListeners() {
CallerLogger.d(TAG,"LoginF2aViewModel:initListeners")
F2aLoginModel.setiTaxiLoginCallback(this)
LoginStatusManager.addListener(TAG,this)
}
fun gotoRestPwd(pwd: String, pwdSecod: String) {
if(!F2aLoginModel.hasInit()){
initListeners()
}
if(pwd!=pwdSecod){
ToastCharterUtils.showToastShort(R.string.biz_login_reset_passwrod_different)
return
}
if(pwd.isBlank()){
ToastCharterUtils.showToastShort(R.string.biz_login_reset_passwrod_non_input)
return
}
if(pwd.length<14||pwd.length>20){
ToastCharterUtils.showToastShort(R.string.biz_login_reset_passwrod_non_compliant)
return
}
loginRespBean?.let {
oldPwd?.let { old->
val mD5Result = Md5Util.getMD5Result(pwd)
F2aLoginModel.gotoRestPwd(it.driverId,mD5Result,old)
}
}
viewCallback?.closeSoftInput()
}
fun gotoLogin(phone: String, pwd: String) {
if(!F2aLoginModel.hasInit()){
initListeners()
}
if (!RegexUtils.isMobileExact(phone)) {
ToastCharterUtils.showToastShort(R.string.biz_login_phone_error)
viewCallback?.inputPhoneError()
return
}
if(pwd.isBlank()){
ToastCharterUtils.showToastShort(R.string.biz_login_pwd_error)
return
}
if(phone== LoginConst.OFFLINEPHONE&&pwd== LoginConst.OFFLINECODE){
gotoOfflineMode()
return
}
val mD5Result = Md5Util.getMD5Result(pwd)
F2aLoginModel.gotoLogin(phone,mD5Result)
viewCallback?.closeSoftInput()
}
fun gotoLogin4F2a(f2aCode: String) {
if(f2aCode.length!=6){
ToastCharterUtils.showToastShort(R.string.biz_login_code_error)
return
}
loginRespBean?.let {
F2aLoginModel.gotoLoginByF2aCode(it.phone,f2aCode)
}
}
override fun loginfirstSuccess(data: LoginRespBean.Result?,oldPwd:String) {
data?.let {
loginRespBean = it
this.oldPwd = oldPwd
if (it.needInitPassword) {
// 修改密码去
viewCallback?.showRestPassword()
}else{
if(it.isPasswordExpired){// 已经超过365天了
// 修改密码去
viewCallback?.showRestPassword()
return
}
if(it.isPasswordExpiringSoon){// 还有特定日期就超过365天
ToastUtils.showShort(ResourcesUtils.getString(R.string.biz_login_password_will_out_day))
}
if(it.isFirstLogin){
viewCallback?.showQrLoginView(it.otpAuthUrl)
}else{
viewCallback?.showF2aLoginViewSecod()
}
} }
} }
} }
private fun initListeners() { override fun restPwdSuccess() {
LoginModel.setiTaxiLoginCallback(this) loginRespBean = null
LoginStatusManager.addListener(TAG,this) oldPwd = null
} viewCallback?.showLoginView()
fun gotoLogin(phone: String, code: String) {
if(!LoginModel.hasInit()){
initListeners()
}
if (!RegexUtils.isMobileExact(phone)) {
ToastCharterUtils.showToastShort(R.string.biz_login_phone_error)
viewCallback?.inputPhoneError()
return
}
if(code.isBlank()||code.length<4){
ToastCharterUtils.showToastShort(R.string.biz_login_code_error)
return
}
if(phone== LoginConst.OFFLINEPHONE&&code== LoginConst.OFFLINECODE){
gotoOfflineMode()
return
}
LoginModel.gotoLogin(phone, code, false)
viewCallback?.closeSoftInput()
}
fun getPhoneCode(phone: String) {
OchChainLogManager.writeChainLog("登录页面","获取验证码${phone}")
if(!LoginModel.hasInit()){
OchChainLogManager.writeChainLog("登录页面","LoginModel没有初始化去初始化")
initListeners()
}
if (!RegexUtils.isMobileExact(phone)) {
ToastCharterUtils.showToastShort(R.string.biz_login_phone_error)
viewCallback?.inputPhoneError()
OchChainLogManager.writeChainLog("登录页面","获取验证码 手机号输入错误")
return
}
LoginModel.getPhoneCode(phone)
}
override fun getPhoneCodeSuccess() {
super.getPhoneCodeSuccess()
val countDownSeconds = 60L;
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(TAG, "倒计时:$it")
}, {
CallerLogger.d(TAG, "倒计时onError:${it}")
it.printStackTrace()
viewCallback?.setCountDownText(AbsMogoApplication.getApp().getString(R.string.biz_login_get_code),true)
}, {
CallerLogger.d(TAG, "倒计时onComplete")
viewCallback?.setCountDownText(AbsMogoApplication.getApp().getString(R.string.biz_login_get_code),true)
})
} }
private fun gotoOfflineMode() { private fun gotoOfflineMode() {
LoginModel.gotoOfflineMode() F2aLoginModel.gotoOfflineMode()
}
fun gotoLogin4Code(phone: String, code: String) {
LoginModel.gotoLogin(phone,code)
} }
interface IErrorInfoViewCallback { interface IErrorInfoViewCallback {
fun inputPhoneError() fun inputPhoneError()
fun closeSoftInput() fun closeSoftInput()
fun setCountDownText(text: String, enable: Boolean) fun showRestPassword()
fun showF2aLoginViewSecod()
fun showQrLoginView(otpAuthUrl: String?)
fun showLoginView()
} }

View File

@@ -0,0 +1,115 @@
package com.mogo.och.biz.login.ui.loginswitch
import android.content.Context
import android.util.AttributeSet
import android.view.View
import android.view.ViewGroup
import android.widget.FrameLayout
import com.mogo.och.biz.login.ui.login.LoginView
import com.mogo.och.biz.login.ui.loginf2a.LoginF2aView
import com.mogo.och.common.module.manager.EnvManager
import com.mogo.och.common.module.manager.transform.OchTransform
import com.mogo.och.common.module.manager.transform.OchTransformDispatch
class LoginSwitchView : FrameLayout, OchTransformDispatch {
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)
companion object {
val TAG = LoginSwitchView::class.java.simpleName
}
private var loginView:LoginView?=null
private var loginF2aView:LoginF2aView?=null
override fun onLoginModeChange() {
super.onLoginModeChange()
loadView()
}
override fun onAttachedToWindow() {
OchTransform.addListener(TAG,this)
super.onAttachedToWindow()
loadView()
}
private fun loadView(){
if (EnvManager.isPhoneCodeMode()) {
handleLoginView(LoginView::class.java, ::loginView){
this.loginView = it
}
} else {
handleLoginView(LoginF2aView::class.java, ::loginF2aView){
loginF2aView = it
}
}
}
// 统一处理
private fun <T : View> handleLoginView(
viewClass: Class<T>,
getView: () -> T?,
setView: (T) -> Unit
) {
val child = getChildAt(0)
if (child != null && viewClass.isInstance(child)) return
removeAllViews()
val view = getView() ?: run {
// 关键修复:两个 View 都统一强转为泛型 T
val newView: T = if (viewClass == LoginView::class.java) {
LoginView(context) as T
} else {
LoginF2aView(context) as T
}
setView(newView)
newView
}
addViewSafely(view)
}
// 安全添加,必加!防止崩溃
private fun addViewSafely(view: View) {
(view.parent as? ViewGroup)?.removeView(view)
addView(view)
}
override fun onDetachedFromWindow() {
super.onDetachedFromWindow()
OchTransform.removeListener(TAG)
}
override fun onVisibilityAggregated(isVisible: Boolean) {
super.onVisibilityAggregated(isVisible)
}
init {
try {
} catch (e: Exception) {
e.printStackTrace()
}
}
}

View File

@@ -15,7 +15,7 @@
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
<com.mogo.och.biz.login.ui.login.LoginView <com.mogo.och.biz.login.ui.loginswitch.LoginSwitchView
android:id="@+id/login_view_info" android:id="@+id/login_view_info"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"

View File

@@ -38,8 +38,8 @@
<androidx.constraintlayout.widget.Group <androidx.constraintlayout.widget.Group
android:id="@+id/group_password_login" android:id="@+id/group_password_login"
android:visibility="gone" android:visibility="visible"
app:constraint_referenced_ids="biz_actv_welcome_login_title,actv_login_phone_title,biz_ace_login_phone_value,actv_phone_code_title,v_phone_code_bg,biz_acet_phone_code_value,biz_acbtn_login" app:constraint_referenced_ids="biz_actv_welcome_login_title,actv_login_phone_title,biz_ace_login_phone_value,actv_phone_code_title,v_phone_code_bg,biz_acet_phone_pwd_value,biz_acbtn_login"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content"/> android:layout_height="wrap_content"/>
@@ -59,7 +59,7 @@
<androidx.constraintlayout.widget.Group <androidx.constraintlayout.widget.Group
android:id="@+id/group_f2a_login" android:id="@+id/group_f2a_login"
android:visibility="visible" android:visibility="gone"
app:constraint_referenced_ids="biz_actv_f2a_login_title_big,biz_actv_f2a_login_title,biz_actv_f2a_login_title_samll,acet_input_number_1,acet_input_number_2,acet_input_number_3,acet_input_number_4,acet_input_number_5,acet_input_number_6,biz_acbtn_f2a_login_normal" app:constraint_referenced_ids="biz_actv_f2a_login_title_big,biz_actv_f2a_login_title,biz_actv_f2a_login_title_samll,acet_input_number_1,acet_input_number_2,acet_input_number_3,acet_input_number_4,acet_input_number_5,acet_input_number_6,biz_acbtn_f2a_login_normal"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content"/> android:layout_height="wrap_content"/>
@@ -128,23 +128,22 @@
app:layout_constraintTop_toBottomOf="@+id/actv_phone_code_title" /> app:layout_constraintTop_toBottomOf="@+id/actv_phone_code_title" />
<androidx.appcompat.widget.AppCompatEditText <androidx.appcompat.widget.AppCompatEditText
android:id="@+id/biz_acet_phone_code_value" android:id="@+id/biz_acet_phone_pwd_value"
android:layout_width="@dimen/dp_760" android:layout_width="@dimen/dp_760"
android:layout_height="136dp" android:layout_height="136dp"
android:background="@null" android:background="@null"
android:gravity="center_vertical" android:gravity="center_vertical"
android:imeOptions="actionDone" android:imeOptions="actionDone"
android:inputType="textPassword" android:inputType="textPassword"
android:maxLength="4"
android:maxLines="1" android:maxLines="1"
android:hint="@string/biz_login_pwd_hint_text"
android:paddingStart="30dp" android:paddingStart="30dp"
android:textColor="@color/white" android:textColor="@color/white"
android:textColorHint="@color/white" android:textColorHint="@color/white"
android:textSize="@dimen/dp_40" android:textSize="@dimen/dp_40"
app:layout_constraintBottom_toBottomOf="@+id/v_phone_code_bg" app:layout_constraintBottom_toBottomOf="@+id/v_phone_code_bg"
app:layout_constraintStart_toStartOf="@+id/v_phone_code_bg" app:layout_constraintStart_toStartOf="@+id/v_phone_code_bg"
app:layout_constraintTop_toTopOf="@+id/v_phone_code_bg" app:layout_constraintTop_toTopOf="@+id/v_phone_code_bg" />
tools:text="1881" />
<androidx.appcompat.widget.AppCompatButton <androidx.appcompat.widget.AppCompatButton
android:id="@+id/biz_acbtn_login" android:id="@+id/biz_acbtn_login"
@@ -195,8 +194,8 @@
android:background="@drawable/biz_login_phone_normal" android:background="@drawable/biz_login_phone_normal"
android:gravity="center_vertical" android:gravity="center_vertical"
android:hint="@string/biz_login_reset_password_first_text_hide" android:hint="@string/biz_login_reset_password_first_text_hide"
android:inputType="numberSigned" android:inputType="text"
android:maxLength="11" android:maxLength="20"
android:maxLines="1" android:maxLines="1"
android:paddingStart="30dp" android:paddingStart="30dp"
android:textColor="@color/white" android:textColor="@color/white"
@@ -224,8 +223,8 @@
android:background="@drawable/biz_login_phone_normal" android:background="@drawable/biz_login_phone_normal"
android:gravity="center_vertical" android:gravity="center_vertical"
android:hint="@string/biz_login_reset_password_first_text_hide" android:hint="@string/biz_login_reset_password_first_text_hide"
android:inputType="numberSigned" android:inputType="text"
android:maxLength="11" android:maxLength="20"
android:maxLines="1" android:maxLines="1"
android:paddingStart="30dp" android:paddingStart="30dp"
android:textColor="@color/white" android:textColor="@color/white"
@@ -271,8 +270,9 @@
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
android:background="@color/white" android:background="@color/white"
android:layout_marginTop="@dimen/dp_30" android:layout_marginTop="@dimen/dp_30"
android:padding="@dimen/dp_10"
android:layout_width="@dimen/dp_369" android:layout_width="@dimen/dp_369"
android:layout_height="@dimen/dp_360"/> android:layout_height="@dimen/dp_369"/>
<View <View
@@ -293,7 +293,7 @@
android:gravity="center_vertical" android:gravity="center_vertical"
android:imeOptions="actionDone" android:imeOptions="actionDone"
android:inputType="numberSigned" android:inputType="numberSigned"
android:maxLength="4" android:maxLength="6"
android:maxLines="1" android:maxLines="1"
android:paddingStart="30dp" android:paddingStart="30dp"
android:textColor="@color/white" android:textColor="@color/white"
@@ -375,6 +375,9 @@
app:layout_constraintTop_toBottomOf="@+id/biz_actv_f2a_login_title_samll" app:layout_constraintTop_toBottomOf="@+id/biz_actv_f2a_login_title_samll"
app:layout_constraintEnd_toStartOf="@+id/acet_input_number_2" app:layout_constraintEnd_toStartOf="@+id/acet_input_number_2"
app:layout_constraintHorizontal_chainStyle="packed" app:layout_constraintHorizontal_chainStyle="packed"
android:gravity="center"
android:textSize="@dimen/dp_40"
android:textColor="@color/white"
android:layout_marginEnd="@dimen/dp_10" android:layout_marginEnd="@dimen/dp_10"
android:layout_marginTop="@dimen/dp_39" android:layout_marginTop="@dimen/dp_39"
android:layout_width="@dimen/dp_110" android:layout_width="@dimen/dp_110"
@@ -387,6 +390,9 @@
app:layout_constraintEnd_toStartOf="@+id/acet_input_number_3" app:layout_constraintEnd_toStartOf="@+id/acet_input_number_3"
android:layout_marginStart="@dimen/dp_10" android:layout_marginStart="@dimen/dp_10"
android:layout_marginEnd="@dimen/dp_10" android:layout_marginEnd="@dimen/dp_10"
android:gravity="center"
android:textSize="@dimen/dp_40"
android:textColor="@color/white"
app:layout_constraintTop_toBottomOf="@+id/biz_actv_f2a_login_title_samll" app:layout_constraintTop_toBottomOf="@+id/biz_actv_f2a_login_title_samll"
android:layout_marginTop="@dimen/dp_39" android:layout_marginTop="@dimen/dp_39"
android:layout_width="@dimen/dp_110" android:layout_width="@dimen/dp_110"
@@ -399,11 +405,13 @@
app:layout_constraintEnd_toStartOf="@+id/acet_input_number_4" app:layout_constraintEnd_toStartOf="@+id/acet_input_number_4"
android:layout_marginStart="@dimen/dp_10" android:layout_marginStart="@dimen/dp_10"
android:layout_marginEnd="@dimen/dp_10" android:layout_marginEnd="@dimen/dp_10"
android:gravity="center"
android:textSize="@dimen/dp_40"
android:textColor="@color/white"
app:layout_constraintTop_toBottomOf="@+id/biz_actv_f2a_login_title_samll" app:layout_constraintTop_toBottomOf="@+id/biz_actv_f2a_login_title_samll"
android:layout_marginTop="@dimen/dp_39" android:layout_marginTop="@dimen/dp_39"
android:layout_width="@dimen/dp_110" android:layout_width="@dimen/dp_110"
android:layout_height="@dimen/dp_135"/> android:layout_height="@dimen/dp_135"/>
<androidx.appcompat.widget.AppCompatEditText <androidx.appcompat.widget.AppCompatEditText
android:id="@+id/acet_input_number_4" android:id="@+id/acet_input_number_4"
android:background="@drawable/biz_login_phone_normal" android:background="@drawable/biz_login_phone_normal"
@@ -411,6 +419,9 @@
app:layout_constraintEnd_toStartOf="@+id/acet_input_number_5" app:layout_constraintEnd_toStartOf="@+id/acet_input_number_5"
android:layout_marginStart="@dimen/dp_10" android:layout_marginStart="@dimen/dp_10"
android:layout_marginEnd="@dimen/dp_10" android:layout_marginEnd="@dimen/dp_10"
android:gravity="center"
android:textSize="@dimen/dp_40"
android:textColor="@color/white"
app:layout_constraintTop_toBottomOf="@+id/biz_actv_f2a_login_title_samll" app:layout_constraintTop_toBottomOf="@+id/biz_actv_f2a_login_title_samll"
android:layout_marginTop="@dimen/dp_39" android:layout_marginTop="@dimen/dp_39"
android:layout_width="@dimen/dp_110" android:layout_width="@dimen/dp_110"
@@ -423,6 +434,9 @@
app:layout_constraintEnd_toStartOf="@+id/acet_input_number_6" app:layout_constraintEnd_toStartOf="@+id/acet_input_number_6"
android:layout_marginStart="@dimen/dp_10" android:layout_marginStart="@dimen/dp_10"
android:layout_marginEnd="@dimen/dp_10" android:layout_marginEnd="@dimen/dp_10"
android:gravity="center"
android:textSize="@dimen/dp_40"
android:textColor="@color/white"
app:layout_constraintTop_toBottomOf="@+id/biz_actv_f2a_login_title_samll" app:layout_constraintTop_toBottomOf="@+id/biz_actv_f2a_login_title_samll"
android:layout_marginTop="@dimen/dp_39" android:layout_marginTop="@dimen/dp_39"
android:layout_width="@dimen/dp_110" android:layout_width="@dimen/dp_110"
@@ -434,6 +448,9 @@
app:layout_constraintStart_toEndOf="@+id/acet_input_number_5" app:layout_constraintStart_toEndOf="@+id/acet_input_number_5"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
android:layout_marginStart="@dimen/dp_10" android:layout_marginStart="@dimen/dp_10"
android:gravity="center"
android:textSize="@dimen/dp_40"
android:textColor="@color/white"
app:layout_constraintTop_toBottomOf="@+id/biz_actv_f2a_login_title_samll" app:layout_constraintTop_toBottomOf="@+id/biz_actv_f2a_login_title_samll"
android:layout_marginTop="@dimen/dp_39" android:layout_marginTop="@dimen/dp_39"
android:layout_width="@dimen/dp_110" android:layout_width="@dimen/dp_110"

View File

@@ -10,15 +10,21 @@
<string name="biz_login_login_success">Login successful</string> <string name="biz_login_login_success">Login successful</string>
<string name="biz_login_phone_error">Please enter a correct phone number</string> <string name="biz_login_phone_error">Please enter a correct phone number</string>
<string name="biz_login_code_error">Please enter a correct verification code</string> <string name="biz_login_code_error">Please enter a correct verification code</string>
<string name="biz_login_pwd_error">Please enter a correct verification password</string>
<string name="biz_login_phone_hint_text">Please enter phone number</string> <string name="biz_login_phone_hint_text">Please enter phone number</string>
<string name="biz_login_get_phone_title">Please enter phone number</string> <string name="biz_login_get_phone_title">Please enter phone number</string>
<string name="biz_login_pwd_hint_text">Please enter password</string>
<string name="biz_login_reset_password_title_big">Set a new password</string> <string name="biz_login_reset_password_title_big">Set a new password</string>
<string name="biz_login_reset_password_title">Please set a new password</string> <string name="biz_login_reset_password_title">Please set a new password</string>
<string name="biz_login_reset_password_first_text_hide">Positions 14-20, containing numbers and English letters (upper and lower case)</string> <string name="biz_login_reset_password_first_text_hide">Positions 14-20, containing numbers and English letters (upper and lower case)</string>
<string name="biz_login_reset_password_second_title">请确认新密码</string> <string name="biz_login_reset_password_second_title">请确认新密码</string>
<string name="biz_login_reset_password_next">Next step</string> <string name="biz_login_reset_password_next">Next step</string>
<string name="biz_login_password_will_out_day">The password is about to expire, and it needs to be changed</string>
<string name="biz_login_reset_passwrod_different">The passwords entered twice do not match. Please re-enter</string>
<string name="biz_login_reset_passwrod_non_compliant">The password does not meet the requirements. Please re-enter</string>
<string name="biz_login_reset_passwrod_non_input">Please enter a new password</string>
<string name="biz_login_f2a_title_big">Welcome to sign in</string> <string name="biz_login_f2a_title_big">Welcome to sign in</string>
<string name="biz_login_f2a_title">Please open the MFA authenticator and enter the 6-digit verification code. If you are unable to obtain the verification code, please contact the administrator</string> <string name="biz_login_f2a_title">Please open the MFA authenticator and enter the 6-digit verification code. If you are unable to obtain the verification code, please contact the administrator</string>

View File

@@ -10,14 +10,20 @@
<string name="biz_login_login_success">登录成功</string> <string name="biz_login_login_success">登录成功</string>
<string name="biz_login_phone_error">请输入正确的手机号</string> <string name="biz_login_phone_error">请输入正确的手机号</string>
<string name="biz_login_code_error">请输入正确的验证码</string> <string name="biz_login_code_error">请输入正确的验证码</string>
<string name="biz_login_pwd_error">请输入正确的密码</string>
<string name="biz_login_phone_hint_text">请输入手机号</string> <string name="biz_login_phone_hint_text">请输入手机号</string>
<string name="biz_login_get_phone_title">请输入手机号</string> <string name="biz_login_get_phone_title">请输入手机号</string>
<string name="biz_login_pwd_hint_text">请输入密码</string>
<string name="biz_login_reset_password_title_big">设置新密码</string> <string name="biz_login_reset_password_title_big">设置新密码</string>
<string name="biz_login_reset_password_title">请设置新密码</string> <string name="biz_login_reset_password_title">请设置新密码</string>
<string name="biz_login_reset_password_first_text_hide">14-20位包含数字、英文大小写</string> <string name="biz_login_reset_password_first_text_hide">14-20位包含数字、英文大小写</string>
<string name="biz_login_reset_password_second_title">请确认新密码</string> <string name="biz_login_reset_password_second_title">请确认新密码</string>
<string name="biz_login_reset_password_next">下一步</string> <string name="biz_login_reset_password_next">下一步</string>
<string name="biz_login_password_will_out_day">密码即将到期,需更改密码</string>
<string name="biz_login_reset_passwrod_different">两次输入的密码不一致,请重新输入</string>
<string name="biz_login_reset_passwrod_non_compliant">密码不符合要求,请重新输入</string>
<string name="biz_login_reset_passwrod_non_input">请输入新密码</string>
<string name="biz_login_f2a_title_big">欢迎登录</string> <string name="biz_login_f2a_title_big">欢迎登录</string>

View File

@@ -54,6 +54,10 @@ object EnvManager {
return isT1T2() && AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode) return isT1T2() && AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)
} }
fun isPhoneCodeMode():Boolean{
return FunctionBuildConfig.loginMode==0
}
} }

View File

@@ -30,4 +30,10 @@ object OchTransform : CallerBase<OchTransformDispatch>(), IOchBizFunctionCall4Ea
it.value.setVideoView(target) it.value.setVideoView(target)
} }
} }
override fun onLoginStateChange() {
M_LISTENERS.forEach{
it.value.onLoginModeChange()
}
}
} }

View File

@@ -6,4 +6,5 @@ interface OchTransformDispatch {
fun logout(){} fun logout(){}
fun setVideoView(target: View?){} fun setVideoView(target: View?){}
fun onLoginModeChange(){}
} }

View File

@@ -90,6 +90,11 @@ public class TaxiPresenter extends Presenter<TaxiFragment> implements ITaxiADASS
public void logout() { public void logout() {
TaxiTaskModel.INSTANCE.logout(); TaxiTaskModel.INSTANCE.logout();
} }
@Override
public void onLoginModeChange() {
}
}; };
//导航去订单目的地 //导航去订单目的地

View File

@@ -6,6 +6,7 @@ project.android.productFlavors {
dimension "project" dimension "project"
buildConfigField 'boolean', 'secure', "true" buildConfigField 'boolean', 'secure', "true"
buildConfigField 'int', 'ttsLanguage', "1" // 仅中文 buildConfigField 'int', 'ttsLanguage', "1" // 仅中文
buildConfigField 'int', 'loginMode', "0" // 手机号验证码登录
buildConfigField 'String', 'URLs', "\"${readFileToJson("mogo").replace("\"", "\\\"")}\"" buildConfigField 'String', 'URLs', "\"${readFileToJson("mogo").replace("\"", "\\\"")}\""
buildConfigField 'String', 'mediaUrlConfig', "\"${readMediaUrlConfigFromJsonFile("mogo").replace("\"", "\\\"")}\"" buildConfigField 'String', 'mediaUrlConfig', "\"${readMediaUrlConfigFromJsonFile("mogo").replace("\"", "\\\"")}\""
} }
@@ -13,6 +14,7 @@ project.android.productFlavors {
dimension "project" dimension "project"
buildConfigField 'boolean', 'secure', "false" buildConfigField 'boolean', 'secure', "false"
buildConfigField 'int', 'ttsLanguage', "1 << 1" // 中英韩 buildConfigField 'int', 'ttsLanguage', "1 << 1" // 中英韩
buildConfigField 'int', 'loginMode', "0" // 手机号验证码登录
buildConfigField 'String', 'URLs', "\"${readFileToJson("yantai").replace("\"", "\\\"")}\"" buildConfigField 'String', 'URLs', "\"${readFileToJson("yantai").replace("\"", "\\\"")}\""
buildConfigField 'String', 'mediaUrlConfig', "\"${readMediaUrlConfigFromJsonFile("yantai").replace("\"", "\\\"")}\"" buildConfigField 'String', 'mediaUrlConfig', "\"${readMediaUrlConfigFromJsonFile("yantai").replace("\"", "\\\"")}\""
} }
@@ -21,6 +23,7 @@ project.android.productFlavors {
dimension "project" dimension "project"
buildConfigField 'boolean', 'secure', "true" buildConfigField 'boolean', 'secure', "true"
buildConfigField 'int', 'ttsLanguage', "1" // 仅中文 buildConfigField 'int', 'ttsLanguage', "1" // 仅中文
buildConfigField 'int', 'loginMode', "0" // 手机号验证码登录
buildConfigField 'String', 'URLs', "\"${readFileToJson("dali").replace("\"", "\\\"")}\"" buildConfigField 'String', 'URLs', "\"${readFileToJson("dali").replace("\"", "\\\"")}\""
buildConfigField 'String', 'mediaUrlConfig', "\"${readMediaUrlConfigFromJsonFile("dali").replace("\"", "\\\"")}\"" buildConfigField 'String', 'mediaUrlConfig', "\"${readMediaUrlConfigFromJsonFile("dali").replace("\"", "\\\"")}\""
} }
@@ -28,6 +31,7 @@ project.android.productFlavors {
dimension "project" dimension "project"
buildConfigField 'boolean', 'secure', "true" buildConfigField 'boolean', 'secure', "true"
buildConfigField 'int', 'ttsLanguage', "1" // 仅中文 buildConfigField 'int', 'ttsLanguage', "1" // 仅中文
buildConfigField 'int', 'loginMode', "1" // 手机号验证码登录
buildConfigField 'String', 'URLs', "\"${readFileToJson("saas").replace("\"", "\\\"")}\"" buildConfigField 'String', 'URLs', "\"${readFileToJson("saas").replace("\"", "\\\"")}\""
buildConfigField 'String', 'mediaUrlConfig', "\"${readMediaUrlConfigFromJsonFile("saas").replace("\"", "\\\"")}\"" buildConfigField 'String', 'mediaUrlConfig', "\"${readMediaUrlConfigFromJsonFile("saas").replace("\"", "\\\"")}\""
} }
@@ -35,6 +39,7 @@ project.android.productFlavors {
dimension "project" dimension "project"
buildConfigField 'boolean', 'secure', "true" buildConfigField 'boolean', 'secure', "true"
buildConfigField 'int', 'ttsLanguage', "1" // 仅中文 buildConfigField 'int', 'ttsLanguage', "1" // 仅中文
buildConfigField 'int', 'loginMode', "1" // 手机号验证码登录
buildConfigField 'String', 'URLs', "\"${readFileToJson("singapore").replace("\"", "\\\"")}\"" buildConfigField 'String', 'URLs', "\"${readFileToJson("singapore").replace("\"", "\\\"")}\""
buildConfigField 'String', 'mediaUrlConfig', "\"${readMediaUrlConfigFromJsonFile("singapore").replace("\"", "\\\"")}\"" buildConfigField 'String', 'mediaUrlConfig', "\"${readMediaUrlConfigFromJsonFile("singapore").replace("\"", "\\\"")}\""
} }

View File

@@ -51,6 +51,7 @@ object ConfigStartUp {
// 演示模式,上一次勾选的数据 // 演示模式,上一次勾选的数据
FunctionBuildConfig.isDemoMode = BuildConfig.IS_DEMO_MODE FunctionBuildConfig.isDemoMode = BuildConfig.IS_DEMO_MODE
FunctionBuildConfig.ttsLanguage = BuildConfig.ttsLanguage FunctionBuildConfig.ttsLanguage = BuildConfig.ttsLanguage
FunctionBuildConfig.loginMode = BuildConfig.loginMode
// 各个module需要的url // 各个module需要的url
FunctionBuildConfig.urlJson = GsonUtils.fromJson(BuildConfig.URLs, UrlConfig::class.java) FunctionBuildConfig.urlJson = GsonUtils.fromJson(BuildConfig.URLs, UrlConfig::class.java)

View File

@@ -46,6 +46,7 @@ import com.mogo.eagle.core.data.constants.MoGoConfig
import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig
import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_BAG_RECORD import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_BAG_RECORD
import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_BEAUTY_MODE import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_BEAUTY_MODE
import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_LOGIN_MODE
import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_FULL_LOG import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_FULL_LOG
import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_RAIN_MODE import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_RAIN_MODE
import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_WARNING_UPLOAD import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_WARNING_UPLOAD
@@ -97,6 +98,7 @@ import com.mogo.eagle.core.function.call.map.CallerVisualAngleManager
import com.mogo.eagle.core.function.call.obu.CallerObuApiManager import com.mogo.eagle.core.function.call.obu.CallerObuApiManager
import com.mogo.eagle.core.function.call.obu.CallerObuConnectListenerManager import com.mogo.eagle.core.function.call.obu.CallerObuConnectListenerManager
import com.mogo.eagle.core.function.call.obu.CallerObuInfoListenerManager import com.mogo.eagle.core.function.call.obu.CallerObuInfoListenerManager
import com.mogo.eagle.core.function.call.och.CallerEagleBaseFunctionCall4OchManager
import com.mogo.eagle.core.function.call.och.CallerOchBizFunctionCall4EagleManager import com.mogo.eagle.core.function.call.och.CallerOchBizFunctionCall4EagleManager
import com.mogo.eagle.core.function.call.setting.CallerMapShowNameManager import com.mogo.eagle.core.function.call.setting.CallerMapShowNameManager
import com.mogo.eagle.core.function.call.setting.CallerMoGoUiSettingManager import com.mogo.eagle.core.function.call.setting.CallerMoGoUiSettingManager
@@ -263,6 +265,7 @@ import kotlinx.android.synthetic.main.view_debug_setting.view.tbLanguage
import kotlinx.android.synthetic.main.view_debug_setting.view.tbLogCatch import kotlinx.android.synthetic.main.view_debug_setting.view.tbLogCatch
import kotlinx.android.synthetic.main.view_debug_setting.view.tbLogcatCenter import kotlinx.android.synthetic.main.view_debug_setting.view.tbLogcatCenter
import kotlinx.android.synthetic.main.view_debug_setting.view.tbLoginLogout import kotlinx.android.synthetic.main.view_debug_setting.view.tbLoginLogout
import kotlinx.android.synthetic.main.view_debug_setting.view.tbLoginMode
import kotlinx.android.synthetic.main.view_debug_setting.view.tbNetLog import kotlinx.android.synthetic.main.view_debug_setting.view.tbNetLog
import kotlinx.android.synthetic.main.view_debug_setting.view.tbObuController import kotlinx.android.synthetic.main.view_debug_setting.view.tbObuController
import kotlinx.android.synthetic.main.view_debug_setting.view.tbObuLog import kotlinx.android.synthetic.main.view_debug_setting.view.tbObuLog
@@ -1152,6 +1155,18 @@ internal class DebugSettingView @JvmOverloads constructor(
} }
} }
tbLoginMode.isChecked = FunctionBuildConfig.loginMode == 0
tbLoginMode.setOnCheckedChangeListener { compoundButton, isChecked ->
if (!compoundButton.isPressed) {
return@setOnCheckedChangeListener
}
CallerOchBizFunctionCall4EagleManager.onLoginStateChange()
}
if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) {
tbLoginMode.visibility = View.GONE
}
// 雨天模式,上一次勾选的数据 // 雨天模式,上一次勾选的数据
tbIsRainMode.isChecked = FunctionBuildConfig.isRainMode tbIsRainMode.isChecked = FunctionBuildConfig.isRainMode
//雨天模式 //雨天模式
@@ -2453,6 +2468,12 @@ internal class DebugSettingView @JvmOverloads constructor(
tbIsRainMode?.text = "开启雨天模式" tbIsRainMode?.text = "开启雨天模式"
} }
if(FunctionBuildConfig.loginMode==0){
tbLoginMode?.text = "手机号验证码登录"
}else{
tbLoginMode?.text = "二次验证登录"
}
obuConnectStatusTv.text = Html.fromHtml( obuConnectStatusTv.text = Html.fromHtml(
"OBU连接状态${ "OBU连接状态${
if (AppConfigInfo.isConnectObu) { if (AppConfigInfo.isConnectObu) {
@@ -2545,6 +2566,19 @@ internal class DebugSettingView @JvmOverloads constructor(
tbIsDemoMode.setPadding(left, top, right, bottom) tbIsDemoMode.setPadding(left, top, right, bottom)
} }
BIZ_LOGIN_MODE -> {
tbLoginMode.isClickable = !lock
val (left, top, right, bottom) = tbLoginMode.currentPadding()
if (lock) {
tbLoginMode.background =
resources.getDrawable(R.drawable.radio_button_lock_background)
} else {
tbLoginMode.background =
resources.getDrawable(R.drawable.radio_button_normal_background_right)
}
tbLoginMode.setPadding(left, top, right, bottom)
}
BIZ_RAIN_MODE -> { BIZ_RAIN_MODE -> {
tbIsRainMode.isClickable = !lock tbIsRainMode.isClickable = !lock
val (left, top, right, bottom) = tbIsRainMode.currentPadding() val (left, top, right, bottom) = tbIsRainMode.currentPadding()
@@ -2897,6 +2931,10 @@ internal class DebugSettingView @JvmOverloads constructor(
tbIsRainMode.isChecked = status tbIsRainMode.isChecked = status
} }
override fun onLoginModeClickEvent(status: Boolean) {
tbLoginMode.isChecked = status
}
/** /**
* 点云模式 * 点云模式
*/ */

View File

@@ -331,6 +331,18 @@
android:textOn="关闭美化模式" android:textOn="关闭美化模式"
android:textSize="@dimen/dp_24" /> android:textSize="@dimen/dp_24" />
<ToggleButton
android:id="@+id/tbLoginMode"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/dp_10"
android:background="@drawable/radio_button_normal_background_right"
android:textColor="#000"
android:padding="@dimen/dp_20"
android:textOff="二次验证登录"
android:textOn="手机号验证码登录"
android:textSize="@dimen/dp_24" />
<ToggleButton <ToggleButton
android:id="@+id/tbIsRainMode" android:id="@+id/tbIsRainMode"
android:layout_width="match_parent" android:layout_width="match_parent"

View File

@@ -161,6 +161,11 @@ object FunctionBuildConfig {
@JvmField @JvmField
var ttsLanguage = 1 var ttsLanguage = 1
@Volatile
@JvmField
var loginMode = 0
/** /**
* 各车型宣传视频本地配置 * 各车型宣传视频本地配置
* 广告json * 广告json

View File

@@ -32,6 +32,7 @@ class FuncBizConfig {
const val BIZ_DNPW = "BIZ_DNPW" // 逆向超车预警 const val BIZ_DNPW = "BIZ_DNPW" // 逆向超车预警
// Foundation // Foundation
const val BIZ_BEAUTY_MODE = "BIZ_BEAUTY_MODE" // 美化模式 const val BIZ_BEAUTY_MODE = "BIZ_BEAUTY_MODE" // 美化模式
const val BIZ_LOGIN_MODE = "BIZ_LOGIN_MODE" // 登录模式
const val BIZ_RAIN_MODE = "BIZ_RAIN_MODE" // 雨天模式 const val BIZ_RAIN_MODE = "BIZ_RAIN_MODE" // 雨天模式
const val BIZ_FULL_LOG = "BIZ_FULL_LOG" // 全量日志 const val BIZ_FULL_LOG = "BIZ_FULL_LOG" // 全量日志
const val BIZ_TRACE_LOG = "BIZ_TRACE_LOG" // 链路日志 todo 暂未有场景,未实现 const val BIZ_TRACE_LOG = "BIZ_TRACE_LOG" // 链路日志 todo 暂未有场景,未实现

View File

@@ -14,4 +14,6 @@ interface IOchBizFunctionCall4Eagle {
fun isLogin(): Boolean fun isLogin(): Boolean
fun setVideoView(target: View?) fun setVideoView(target: View?)
fun onLoginStateChange()
} }

View File

@@ -10,6 +10,12 @@ interface ISopSettingListener {
*/ */
fun onDemoModeClickEvent(status: Boolean){} fun onDemoModeClickEvent(status: Boolean){}
/**
* 美化模式
*/
fun onLoginModeClickEvent(status: Boolean){}
/** /**
* 雨天模式 * 雨天模式
*/ */

View File

@@ -1,7 +1,9 @@
package com.mogo.eagle.core.function.call.och package com.mogo.eagle.core.function.call.och
import android.view.View import android.view.View
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.function.api.och.IOchBizFunctionCall4Eagle import com.mogo.eagle.core.function.api.och.IOchBizFunctionCall4Eagle
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsFuncConfigListenerManager
/** /**
* 实现提供给 鹰眼底层 调用的接口 * 实现提供给 鹰眼底层 调用的接口
@@ -33,4 +35,13 @@ object CallerOchBizFunctionCall4EagleManager : IOchBizFunctionCall4Eagle {
override fun setVideoView(target: View?) { override fun setVideoView(target: View?) {
ochBizFunctionCall4EagleInstance?.setVideoView(target) ochBizFunctionCall4EagleInstance?.setVideoView(target)
} }
override fun onLoginStateChange() {
if(FunctionBuildConfig.loginMode==0){
FunctionBuildConfig.loginMode = 1
}else{
FunctionBuildConfig.loginMode = 0
}
ochBizFunctionCall4EagleInstance?.onLoginStateChange()
}
} }