package com.casic.smarttube.view import androidx.lifecycle.ViewModelProvider import com.casic.smarttube.R import com.casic.smarttube.utils.* import com.casic.smarttube.vm.AuthenticateViewModel import com.casic.smarttube.vm.LoginViewModel import com.casic.smarttube.vm.UserViewModel import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.SaveKeyValues import kotlinx.android.synthetic.main.activity_login.* class LoginActivity : KotlinBaseActivity() { private lateinit var authenticateViewModel: AuthenticateViewModel private lateinit var loginViewModel: LoginViewModel private lateinit var userViewModel: UserViewModel override fun initLayoutView(): Int = R.layout.activity_login override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(true).init() } override fun initData() { // 设置默认账号密码 userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) userPasswordView.setText(SaveKeyValues.getValue(LocaleConstant.PASSWORD, "") as String) authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) } override fun initEvent() { loginButton.setOnClickListener { val account = userNameView.text.toString().trim() val userPassword = userPasswordView.text.toString().trim() if (account.isBlank()) { "用户名不能为空".show(this) return@setOnClickListener } if (userPassword.isBlank()) { "密码不能为空".show(this) return@setOnClickListener } SaveKeyValues.putValue(LocaleConstant.ACCOUNT, account) SaveKeyValues.putValue(LocaleConstant.PASSWORD, userPassword) authenticateViewModel.obtainPublicKey() } authenticateViewModel.keyModel.observe(this, { if (it.code == 200) {//用code判断,别的判断可能有坑 val keyString = it.data!!.publicKey!! /** * 修改密码需要用到key,先存着 * */ AuthenticationHelper.savePublicKey(keyString) val publicKey = RSAUtils.keyStrToPublicKey(keyString) val account = userNameView.text.toString() val userPassword = userPasswordView.text.toString() val dataByPublicKey = RSAUtils.encryptDataByPublicKey(userPassword.toByteArray(), publicKey!!) //登录并获取Token,POST请求 loginViewModel.enter(it.data!!.sid!!, account, dataByPublicKey) loginViewModel.enterResultModel.observe(this, { loginResult -> if (loginResult.code == 200) { AuthenticationHelper.saveToken(loginResult.data!!.token!!) /** * 获取token之后保存用户信息 * */ userViewModel.obtainUserDetail() //验证成功登录 this.navigatePageTo<MainActivity>() finish() } }) loginViewModel.loadState.observe(this, { LoadingDialogHub.dismiss() }) } }) authenticateViewModel.loadState.observe(this, { LoadingDialogHub.show(this, "登录中,请稍后") }) } }