package com.casic.smarttube.view import android.os.Bundle import androidx.lifecycle.ViewModelProvider import com.casic.smarttube.databinding.ActivityLoginBinding import com.casic.smarttube.utils.AuthenticationHelper import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.utils.RSAUtils 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.ActivityStackManager import com.pengxh.kt.lite.utils.LoadingDialog import com.pengxh.kt.lite.utils.SaveKeyValues class LoginActivity : KotlinBaseActivity<ActivityLoginBinding>() { private val context = this private lateinit var authenticateViewModel: AuthenticateViewModel private lateinit var loginViewModel: LoginViewModel private lateinit var userViewModel: UserViewModel override fun initViewBinding(): ActivityLoginBinding { return ActivityLoginBinding.inflate(layoutInflater) } override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(true).init() } override fun initOnCreate(savedInstanceState: Bundle?) { ActivityStackManager.addActivity(this) // 设置默认账号密码 binding.userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) binding.userPasswordView.setText( SaveKeyValues.getValue(LocaleConstant.PASSWORD, "") as String ) authenticateViewModel = ViewModelProvider(this)[AuthenticateViewModel::class.java] loginViewModel = ViewModelProvider(this)[LoginViewModel::class.java] userViewModel = ViewModelProvider(this)[UserViewModel::class.java] } override fun observeRequestState() { authenticateViewModel.loadState.observe(this) { LoadingDialog.show(this, "登录中,请稍后") } loginViewModel.loadState.observe(this) { LoadingDialog.dismiss() } } override fun initEvent() { binding.loginButton.setOnClickListener { val account = binding.userNameView.text.toString().trim() val userPassword = binding.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.getPublicKey(this) } authenticateViewModel.keyData.observe(this) { if (it.code == 200) {//用code判断,别的判断可能有坑 val keyString = it.data!!.publicKey!! /** * 修改密码需要用到key,先存着 * */ AuthenticationHelper.savePublicKey(keyString) val publicKey = RSAUtils.keyStrToPublicKey(keyString) val account = binding.userNameView.text.toString() val userPassword = binding.userPasswordView.text.toString() val dataByPublicKey = RSAUtils.encryptDataByPublicKey( userPassword.toByteArray(), publicKey!! ) loginViewModel.enter(context, it.data!!.sid!!, account, dataByPublicKey) loginViewModel.enterResultData.observe(this) { loginResult -> if (loginResult.code == 200) { AuthenticationHelper.saveToken(loginResult.data!!.token!!) userViewModel.getUserDetail() navigatePageTo<MainActivity>() finish() } } } } } }