登录逻辑修改

main
chenglifeng 8 months ago
parent 9c4465c1e3
commit c7131b3992
  1. 42
      app/src/main/java/com/project/survey/logic/viewmodel/LoginViewModel.kt
  2. 19
      app/src/main/java/com/project/survey/network/Api.kt
  3. 12
      app/src/main/java/com/project/survey/ui/SplashActivity.kt
  4. 20
      app/src/main/java/com/project/survey/ui/base/BaseBindingActivity.kt
  5. 57
      app/src/main/java/com/project/survey/ui/home/MeFragment.kt
  6. 36
      app/src/main/java/com/project/survey/ui/login/LoginActivity.kt
  7. 48
      app/src/main/java/com/project/survey/ui/login/LoginInputCodeActivity.kt
  8. 19
      app/src/main/java/com/project/survey/ui/project/ProjectListActivity.kt
  9. 3
      app/src/main/java/com/project/survey/util/ActivityNavUtil.kt
  10. 2
      app/src/main/java/com/project/survey/widget/edittext/verificationcode/SerialnumberLayout.java
  11. 2
      app/src/main/res/layout/activity_forget_pwd_input_code.xml
  12. 3
      app/src/main/res/layout/activity_login.xml
  13. 25
      app/src/main/res/layout/activity_login_input_code.xml
  14. 4
      app/src/main/res/layout/fragment_me.xml
  15. 2
      app/src/main/res/layout/view_password.xml
  16. 3
      app/src/main/res/values/color.xml
  17. 1
      app/src/main/res/values/strings.xml

@ -2,22 +2,64 @@ package com.project.survey.logic.viewmodel
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import blankj.utilcode.util.ActivityUtils
import com.project.survey.constants.EventConstants
import com.project.survey.constants.SPConstants
import com.project.survey.logic.bean.LoginBean
import com.project.survey.logic.event.Message
import com.project.survey.network.RetrofitClient
import com.project.survey.ui.MainActivity
import com.project.survey.ui.login.LoginActivity
import com.project.survey.ui.login.LoginInputCodeActivity
import com.project.survey.util.SPUtils
import kotlinx.coroutines.delay
class LoginViewModel : BaseViewModel() {
val api = RetrofitClient.createApiService()
// val externalPersonSMSCodeResponse: LiveData<Any>
// get() = _externalPersonSMSCodeResponse
// private val _externalPersonSMSCodeResponse = MutableLiveData<Any>()
/**
* 外部用户获取验证码
*/
fun fetchExternalPersonSMSCode(account: String, password: String) {
launch {
val res = api.fetchExternalPersonSMSCode(account, password)
if (res.success) {
// _externalPersonSMSCodeResponse.postValue(res.data)
LoginInputCodeActivity.start(account, password, res.data?:"")
}
}
}
val loginResponse: LiveData<LoginBean>
get() = _loginResponse
private val _loginResponse = MutableLiveData<LoginBean>()
/**
* 外部用户登录
*/
fun externalPersonLogin(account: String, password: String, code: String){
launch {
val res = api.externalPersonLogin(account, password, code)
if (res.success) {
// _externalPersonSMSCodeResponse.postValue(res.data)
SPUtils.put(SPConstants.TOKEN, res.data.token)
SPUtils.put(SPConstants.ACCOUNT, account)
SPUtils.put(SPConstants.MOBILE_PHONE, res.data.mobilePhone)
msgEvent.postValue(Message(EventConstants.LOGIN_STATUS))
MainActivity.start()
ActivityUtils.finishActivity(LoginActivity::class.java)
ActivityUtils.finishActivity(LoginInputCodeActivity::class.java)
}
}
}
/**
* 登录
*/

@ -16,6 +16,25 @@ interface Api {
@Query("password") password: String
): HttpResult<LoginBean>
/**
* 外部用户获取验证码
*/
@GET("/je/personInfo/sendSms")
suspend fun fetchExternalPersonSMSCode(
@Query("account") account: String,
@Query("password") password: String
): HttpResult<String?>
/**
* 外部用户登录
*/
@GET("/je/personInfo/externalEntry")
suspend fun externalPersonLogin(
@Query("account") account: String,
@Query("password") password: String,
@Query("code") code: String
): HttpResult<LoginBean>
/**
* 获取用户可访问的所有项目的信息
*/

@ -1,7 +1,10 @@
package com.project.survey.ui
import com.project.survey.constants.SPConstants
import com.project.survey.databinding.ActivitySplashBinding
import com.project.survey.ui.base.BaseBindingActivity
import com.project.survey.ui.login.LoginActivity
import com.project.survey.util.SPUtils
/**
* 启动页
@ -11,11 +14,16 @@ class SplashActivity : BaseBindingActivity<ActivitySplashBinding>() {
override fun getBinding(): ActivitySplashBinding = ActivitySplashBinding.inflate(layoutInflater)
override fun initView() {
MainActivity.start()
finish()
}
override fun initData() {
if (SPUtils.getString(SPConstants.TOKEN).isNullOrBlank()) {
LoginActivity.start()
} else {
MainActivity.start()
}
finish()
}
override fun initListener() {

@ -2,20 +2,17 @@ package com.project.survey.ui.base
import android.os.Bundle
import android.view.MenuItem
import android.view.View
import android.view.WindowManager
import androidx.annotation.StringRes
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.app.AppCompatDelegate
import androidx.appcompat.widget.Toolbar
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.core.content.ContextCompat
import androidx.viewbinding.ViewBinding
import blankj.utilcode.util.Utils
import com.gyf.immersionbar.ImmersionBar
import com.project.survey.App
import com.project.survey.R
import com.project.survey.ui.interfacee.ImmersionAction
import com.project.survey.util.Tools
import com.project.survey.util.param.ParamUtil
import org.polaric.colorful.Colorful
@ -40,7 +37,7 @@ abstract class BaseBindingActivity<VB : ViewBinding> : AppCompatActivity() {
// //设置背景色
// mBinding.root.setBackgroundColor(Tools.getColor(R.color.bg_content))
initToolBar()
// initToolBar()
initView()
initListener()
initData()
@ -86,4 +83,15 @@ abstract class BaseBindingActivity<VB : ViewBinding> : AppCompatActivity() {
return true
}
protected fun immersionToolbar(toolbar: Toolbar, title: String? = null) {
ImmersionBar.with(this)
.statusBarDarkFont(true)
.titleBarMarginTop(toolbar)
.init()
setSupportActionBar(toolbar)
toolbar.setBackgroundColor(0)
toolbar.setTitleTextColor(ContextCompat.getColor(this, R.color.text_color_main))
toolbar.setTitle(title)
}
}

@ -3,6 +3,7 @@ package com.project.survey.ui.home
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.fragment.app.viewModels
import blankj.utilcode.util.ActivityUtils
import com.afollestad.materialdialogs.MaterialDialog
import com.project.survey.BuildConfig
import com.project.survey.R
@ -12,9 +13,11 @@ import com.project.survey.databinding.FragmentMeBinding
import com.project.survey.extend.setOnClickNoRepeatListener
import com.project.survey.logic.event.Message
import com.project.survey.logic.viewmodel.LoginViewModel
import com.project.survey.ui.MainActivity
import com.project.survey.ui.base.BaseBindingFragment
import com.project.survey.ui.login.LoginActivity
import com.project.survey.ui.project.ProjectListActivity
import com.project.survey.util.ActivityNavUtil
import com.project.survey.util.SPUtils
/**
@ -31,44 +34,44 @@ class MeFragment : BaseBindingFragment<FragmentMeBinding>() {
}
override fun initData() {
viewModel.msgEvent.observe(this) {
updateUIByData()
}
updateUIByData()
mBinding.tvName.text = SPUtils.getString(SPConstants.ACCOUNT)
// viewModel.msgEvent.observe(this) {
// updateUIByData()
// }
if (BuildConfig.DEBUG) {
mBinding.tvVersion.text = BuildConfig.VERSION_NAME
}
}
private fun updateUIByData(){
private fun updateUIByData() {
val token = SPUtils.getString(SPConstants.TOKEN) ?: ""
mBinding.tvLoginOrOut.text =
if (token.isBlank())
getString(R.string.login)
else
getString(R.string.login_out)
mBinding.tvName.text =
if (token.isBlank()) "请登录" else SPUtils.getString(SPConstants.ACCOUNT) ?: ""
}
override fun initListener() {
mBinding.tvLoginOrOut.setOnClickNoRepeatListener {
if (SPUtils.getString(SPConstants.TOKEN).isNullOrBlank()) {
// 登录
LoginActivity.start()
} else {
// 退出登录
MaterialDialog.Builder(mContext)
.title("确定退出吗?")
.negativeText("取消")
.positiveText("退出")
.onPositive { _, _ ->
SPUtils.removeKey(SPConstants.TOKEN)
SPUtils.removeKey(SPConstants.ACCOUNT)
viewModel.msgEvent.postValue(Message(EventConstants.LOGIN_STATUS))
}
.show()
}
mBinding.tvLoginOut.setOnClickNoRepeatListener {
// 退出登录
MaterialDialog.Builder(mContext)
.title("确定退出吗?")
.negativeText("取消")
.positiveText("退出")
.onPositive { _, _ ->
SPUtils.removeKey(SPConstants.TOKEN)
SPUtils.removeKey(SPConstants.ACCOUNT)
SPUtils.removeKey(SPConstants.MOBILE_PHONE)
ActivityNavUtil.finishActivity<MainActivity>()
ActivityNavUtil.startActivity<LoginActivity> { }
// viewModel.msgEvent.postValue(Message(EventConstants.LOGIN_STATUS))
}
.show()
// if (SPUtils.getString(SPConstants.TOKEN).isNullOrBlank()) {
// // 登录
// LoginActivity.start()
// } else {
//
// }
}
mBinding.llSwitchProject.setOnClickNoRepeatListener {
ProjectListActivity.start()

@ -40,10 +40,14 @@ class LoginActivity : BaseBindingActivity<ActivityLoginBinding>() {
mBinding.tvError.text = it
mBinding.tvError.isVisibleOrInvisible(true)
}
// 外部账号获取验证码
// viewModel.externalPersonSMSCodeResponse.observe(this) {
// LoginInputCodeActivity.start()
// }
// 登录成功
viewModel.loginResponse.observe(this) {
finish()
}
// viewModel.loginResponse.observe(this) {
// finish()
// }
}
override fun initListener() {
@ -61,16 +65,18 @@ class LoginActivity : BaseBindingActivity<ActivityLoginBinding>() {
// 登录
mBinding.btnLogin.setOnClickNoRepeatListener {
val account = mBinding.etAccount.text.toString()
val password = mBinding.passwordView.getText()
if (account.isBlank() || password.isNullOrBlank()) {
toast("账号或密码不能为空")
return@setOnClickNoRepeatListener
}
if (isOutLogin) {
loginByOut()
// 外部账号登录
viewModel.fetchExternalPersonSMSCode(account, password)
} else {
val account = mBinding.etAccount.text.toString()
val password = mBinding.passwordView.getText()
if (account.isBlank() || password.isNullOrBlank()) {
toast("账号或密码不能为空")
return@setOnClickNoRepeatListener
}
viewModel.login(account, password)
toast("开发中……")
}
}
@ -87,14 +93,6 @@ class LoginActivity : BaseBindingActivity<ActivityLoginBinding>() {
startActivity(Intent(this, LoginInputCodeActivity::class.java))
}
/**
* 外部登录
*/
private fun loginByOut() {
}
private fun refreshInnerOutUi() {
if (isOutLogin) {
//当前外部登录

@ -1,17 +1,49 @@
package com.project.survey.ui.login
import android.util.Log
import com.project.survey.ui.base.BaseBindingActivity
import androidx.activity.viewModels
import com.project.survey.R
import com.project.survey.databinding.ActivityLoginInputCodeBinding
import com.project.survey.logic.viewmodel.LoginViewModel
import com.project.survey.ui.base.BaseBindingActivity
import com.project.survey.util.ActivityNavUtil
import com.project.survey.util.KeyboardUtils
import com.project.survey.util.param.Param
class LoginInputCodeActivity : BaseBindingActivity<ActivityLoginInputCodeBinding>() {
override fun getBinding(): ActivityLoginInputCodeBinding {
return ActivityLoginInputCodeBinding.inflate(layoutInflater)
companion object {
fun start(account: String, password: String, mobile:String) {
ActivityNavUtil.startActivity<LoginInputCodeActivity> {
putString("account", account)
putString("password", password)
putString("mobile", mobile)
}
}
}
override fun getBinding(): ActivityLoginInputCodeBinding =
ActivityLoginInputCodeBinding.inflate(layoutInflater)
private val viewModel: LoginViewModel by viewModels()
@Param
private lateinit var account: String
@Param
private lateinit var password: String
@Param
private lateinit var mobile: String
override fun initView() {
mBinding.etInputCode.setOnInputListener {
Log.d("hwhw", "sss" + it)
immersionToolbar(mBinding.ilToolBar.toolbar)
if (mobile.length == 11) {
mBinding.tvTips.text =
String.format(
getString(R.string.the_verification_code_was_sent_for_login),
mobile.replace("(\\d{3})\\d{4}(\\d{4})","$1****$2")
)
}
}
@ -20,7 +52,9 @@ class LoginInputCodeActivity : BaseBindingActivity<ActivityLoginInputCodeBinding
}
override fun initListener() {
mBinding.etInputCode.setOnInputListener {
viewModel.externalPersonLogin(account, password, it)
}
}
}

@ -3,8 +3,6 @@ package com.project.survey.ui.project
import android.view.Menu
import android.view.MenuItem
import androidx.activity.viewModels
import androidx.core.content.ContextCompat
import com.gyf.immersionbar.ImmersionBar
import com.project.survey.R
import com.project.survey.constants.SPConstants
import com.project.survey.databinding.ActivityProjectListBinding
@ -30,15 +28,16 @@ class ProjectListActivity : BaseBindingActivity<ActivityProjectListBinding>() {
private val adapter by lazy { ProjectListAdapter() }
override fun initView() {
ImmersionBar.with(this)
.statusBarDarkFont(true)
.titleBarMarginTop(mBinding.ilToolBar.toolbar)
.init()
setSupportActionBar(mBinding.ilToolBar.toolbar)
immersionToolbar(mBinding.ilToolBar.toolbar, "项目列表")
// ImmersionBar.with(this)
// .statusBarDarkFont(true)
// .titleBarMarginTop(mBinding.ilToolBar.toolbar)
// .init()
// setSupportActionBar(mBinding.ilToolBar.toolbar)
mBinding.ilToolBar.toolbar.setBackgroundColor(0)
mBinding.ilToolBar.toolbar.setTitle("项目列表")
mBinding.ilToolBar.toolbar.setTitleTextColor(ContextCompat.getColor(this, R.color.text_color_main))
// mBinding.ilToolBar.toolbar.setBackgroundColor(0)
// mBinding.ilToolBar.toolbar.setTitle("项目列表")
// mBinding.ilToolBar.toolbar.setTitleTextColor(ContextCompat.getColor(this, R.color.text_color_main))
// initTabLayout()
mBinding.recyclerView.addItemDecoration(HorDividerDecoration(this))

@ -10,4 +10,7 @@ object ActivityNavUtil {
ActivityUtils.startActivity(Bundle().apply(block), T::class.java)
}
inline fun <reified T : AppCompatActivity> finishActivity(){
ActivityUtils.finishActivity(T::class.java)
}
}

@ -18,6 +18,7 @@ import android.widget.RelativeLayout;
import android.widget.Toast;
import com.project.survey.R;
import com.project.survey.util.KeyboardUtils;
import com.project.survey.util.Tools;
import java.util.ArrayList;
@ -167,6 +168,7 @@ public class SerialnumberLayout extends RelativeLayout {
editViews.get(0).setFocusable(true);
editViews.get(0).setFocusableInTouchMode(true);
editViews.get(0).requestFocus();
KeyboardUtils.showSoftInput(editViews.get(0));
}
private void showCode(int location, String code) {

@ -34,7 +34,7 @@
android:layout_marginHorizontal="@dimen/sw_22dp"
android:layout_marginTop="@dimen/sw_24dp"
app:code_number="6"
app:line_color_default="@color/c_dfdfdf"
app:line_color_default="@color/text_color_df"
app:line_color_focus="@color/colorPrimary" />
</LinearLayout>

@ -35,7 +35,8 @@
android:id="@+id/etAccount"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text=""
android:singleLine="true"
android:imeOptions="actionNext"
android:textColor="@color/text_color_20"
android:textSize="14sp" />

@ -5,24 +5,27 @@
android:layout_height="match_parent"
android:orientation="vertical">
<include layout="@layout/sh_toolbar" />
<include
android:id="@+id/ilToolBar"
layout="@layout/sh_toolbar" />
<TextView
android:id="@+id/tvAccountDesc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/sw_22dp"
android:layout_marginTop="@dimen/sw_55dp"
android:layout_marginHorizontal="@dimen/margin_side"
android:layout_marginTop="12dp"
android:text="@string/please_input_code"
android:textColor="@color/text_color_1"
android:textSize="@dimen/sw_20sp"
android:textColor="@color/text_color_20"
android:textSize="20sp"
android:textStyle="bold" />
<TextView
android:id="@+id/tvTips"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/sw_22dp"
android:layout_marginTop="@dimen/sw_6dp"
android:layout_marginHorizontal="@dimen/margin_side"
android:layout_marginTop="6dp"
android:text="@string/the_verification_code_was_sent_for_login"
android:textColor="@color/text_color_727778"
android:textSize="@dimen/sw_14sp" />
@ -31,11 +34,11 @@
android:id="@+id/etInputCode"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/sw_22dp"
android:layout_marginTop="@dimen/sw_24dp"
android:layout_marginHorizontal="@dimen/margin_side"
android:layout_marginTop="24dp"
app:code_number="6"
app:line_color_default="@color/c_dfdfdf"
app:line_color_focus="@color/colorPrimary" />
app:line_color_default="@color/text_color_df"
app:line_color_focus="@color/text_color_396bd0" />
</LinearLayout>

@ -138,10 +138,10 @@
</LinearLayout>
<TextView
android:id="@+id/tvLoginOrOut"
android:id="@+id/tvLoginOut"
android:layout_width="match_parent"
android:layout_height="48dp"
android:text="@string/login"
android:text="@string/login_out"
android:layout_marginTop="8dp"
android:gravity="center"
android:background="@color/white"

@ -7,6 +7,8 @@
android:layout_height="wrap_content"
android:inputType="textPassword"
android:paddingEnd="@dimen/sw_24dp"
android:singleLine="true"
android:imeOptions="actionNext"
android:textColor="@color/text_color_20"
android:textSize="14sp" />

@ -11,7 +11,7 @@
<color name="c_2964da">#2964DA</color>
<color name="c_ebebeb">#EBEBEB</color>
<color name="text_color_727778">#727778</color>
<color name="c_dfdfdf">#DFDFDF</color>
<color name="text_color_df">#DFDFDF</color>
<color name="hor_line">#EBEBEB</color>
<color name="transparent">#00000000</color>
<color name="c_10000000">#10000000</color>
@ -23,6 +23,7 @@
<color name="text_color_fff">#FFFFFF</color>
<color name="text_color_20">#202020</color>
<color name="text_color_CC5155">#CC5155</color>
<color name="text_color_396bd0">#396BD0</color>
<color name="bg_color_home_page">#F9FAFB</color>
<color name="bg_color_main_tab">#FFFFFF</color>

@ -40,6 +40,7 @@
<string name="xui_met_not_allow_empty" translatable="false">输入不能为空!</string>
<string name="please_input_code">请输入验证码</string>
<string name="the_verification_code_was_sent_for_login">验证码已发送至%1$s的手机,如您已更换手机,请联系管理员。</string>
<!-- <string name="the_verification_code_was_sent_for_login">验证码已发送至您的手机,如您已更换手机,请联系管理员。</string>-->
<string name="the_verification_code_was_sent_for_forget_pwd">验证码已发送至%1$s的手机,请输入6位数验证码。</string>
<string name="authentication">身份验证</string>
<string name="please_input_username">请输入账号。</string>

Loading…
Cancel
Save