package com.juhabi.birds.mine import android.os.Bundle import android.view.LayoutInflater import android.view.View import com.gyf.immersionbar.ImmersionBar import com.juhabi.birds.R import com.juhabi.birds.base.BaseActivity import com.juhabi.birds.databinding.ActivityMineCenterBinding import com.juhabi.birds.databinding.ModifyPsdLayoutBinding import com.juhabi.birds.main.model.AppVersionInfo import com.juhabi.birds.mine.model.MineUserInfo import com.juhabi.birds.mine.mvp.MineContract import com.juhabi.birds.mine.mvp.MineImpl import com.juhabi.birds.mine.mvp.MinePresenter import com.juhabi.birds.util.ToastUtil /** * 旧密码,修改新密码 */ class ModifyPsdActivity : BaseActivity(), MineContract.MineView, View.OnClickListener { override fun createBinding(inflater: LayoutInflater): ModifyPsdLayoutBinding { return ModifyPsdLayoutBinding.inflate(inflater) } override fun createPresenter(): MinePresenter? { return MinePresenter(MineImpl()) } override fun initWindows() { ImmersionBar.with(this) .statusBarView(binding.statusBarView) .statusBarDarkFont(true) .navigationBarColor(R.color.color_zhu) .navigationBarDarkIcon(true) .init() } override fun initView(savedInstanceState: Bundle?) { listOf( binding.oldPsdVisibilityButton, binding.passwordVisibilityButton, binding.confirmPasswordVisibilityButton, binding.confirmButton, binding.includedTitle.imgBack, ).forEach { button -> button.setOnClickListener(this) } } override fun onClick(view: View) { when(view.id){ R.id.img_back ->{ finish() } R.id.confirmButton ->{//确认修改 val oldPassword = binding.oldPasswordEditText.text.toString() val newPassword = binding.passwordEditText.text.toString() val confirmPassword = binding.confirmPasswordEditText.text.toString() // 按顺序校验输入项,避免无效数据提交到服务端。 if (oldPassword.isBlank()) { ToastUtil.showShort(mContext, "当前密码不能为空") return } if (newPassword.isBlank()) { ToastUtil.showShort(mContext, "新密码不能为空") return } if (confirmPassword.isBlank()) { ToastUtil.showShort(mContext, "请再次输入新密码") return } if (oldPassword == newPassword) { ToastUtil.showShort(mContext, "新密码不能与当前密码相同") return } if (newPassword != confirmPassword) { ToastUtil.showShort(mContext, "两次输入的新密码不一致") return } if (!isValidPassword(newPassword)) { ToastUtil.showShort(mContext, "密码需为8-20位,且包含大小写字母和数字") return } presenter?.modifyPassword(oldPassword, newPassword) } } } override fun showError(message: String) { hideLoading() ToastUtil.showShort(mContext, message) } override fun onModifyPasswordSuccess(message: String) { hideLoading() ToastUtil.showShort(mContext, message.ifBlank { "密码修改成功" }) finish() } /** 8-20 位,且同时包含大写、小写字母和数字。 */ private fun isValidPassword(password: String): Boolean { if (password.length !in PASSWORD_MIN_LENGTH..PASSWORD_MAX_LENGTH) return false return password.any { it.isUpperCase() } && password.any { it.isLowerCase() } && password.any { it.isDigit() } } private companion object { const val PASSWORD_MIN_LENGTH = 8 const val PASSWORD_MAX_LENGTH = 20 } override fun getUserInfoSuccess(userInfo: MineUserInfo) { } override fun onVersionChecked(versionInfo: AppVersionInfo) { } }