个人资料

This commit is contained in:
2026-05-12 14:25:13 +08:00
parent 638968e90a
commit 1372ba62a0
22 changed files with 1566 additions and 8 deletions

View File

@@ -0,0 +1,35 @@
package com.example.defenseapplication.personal
import android.content.Intent
import android.os.Bundle
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import com.example.defenseapplication.R
import com.example.defenseapplication.databinding.FaceManagementActivityBinding
import com.example.defenseapplication.databinding.LoginPasswordActivityBinding
import com.example.defenseapplication.login.FaceVerificationActivity
import com.gyf.immersionbar.ImmersionBar
//人脸管理页面
class FaceManagementActivity : AppCompatActivity() {
private lateinit var binding: FaceManagementActivityBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = FaceManagementActivityBinding.inflate(layoutInflater)
setContentView(binding.root)
ImmersionBar.with(this)
.statusBarDarkFont(true)
.titleBar(binding.topBar)
.init()
binding.ivBack.setOnClickListener {
finish()
}
binding.faceManagement.setOnClickListener {
startActivity(Intent(this, FaceVerificationActivity::class.java))
}
}
}

View File

@@ -0,0 +1,30 @@
package com.example.defenseapplication.personal
import android.os.Bundle
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import com.example.defenseapplication.R
import com.example.defenseapplication.databinding.LoginPasswordActivityBinding
import com.example.defenseapplication.databinding.PasswordManagementActivityBinding
import com.gyf.immersionbar.ImmersionBar
//登录密码
class LoginPasswordActivity : AppCompatActivity() {
private lateinit var binding: LoginPasswordActivityBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = LoginPasswordActivityBinding.inflate(layoutInflater)
setContentView(binding.root)
ImmersionBar.with(this)
.statusBarDarkFont(true)
.titleBar(binding.topBar)
.init()
binding.ivBack.setOnClickListener {
finish()
}
}
}

View File

@@ -0,0 +1,80 @@
package com.example.defenseapplication.personal
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.blankj.utilcode.util.SPUtils
import com.example.defenseapplication.R
import com.example.defenseapplication.databinding.OperationPasswordActivityBinding
import com.gyf.immersionbar.ImmersionBar
//操作密码
class OperationPasswordActivity : AppCompatActivity() {
private lateinit var binding: OperationPasswordActivityBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = OperationPasswordActivityBinding.inflate(layoutInflater)
setContentView(binding.root)
ImmersionBar.with(this)
.statusBarDarkFont(true)
.titleBar(binding.topBar)
.init()
initListener()
}
private fun initListener() {
binding.ivBack.setOnClickListener {
finish()
}
binding.swOperationPassword.setOnCheckedChangeListener { _, isChecked ->
when (isChecked) {
true -> {
binding.etPassword.isEnabled = true
binding.etConfirmPassword.isEnabled = true
binding.btnConfirmReset.isEnabled = true
Toast.makeText(this, getString(R.string.operation_password_enabled), Toast.LENGTH_SHORT).show()
}
false -> {
binding.etPassword.isEnabled = false
binding.etConfirmPassword.isEnabled = false
binding.btnConfirmReset.isEnabled = false
SPUtils.getInstance().remove("operation_password")
Toast.makeText(this, getString(R.string.operation_password_disabled), Toast.LENGTH_SHORT).show()
}
}
}
binding.btnConfirmReset.setOnClickListener {
val password = binding.etPassword.text.toString()
val confirmPassword = binding.etConfirmPassword.text.toString()
if (password.isEmpty()) {
Toast.makeText(this, getString(R.string.password_cannot_empty), Toast.LENGTH_SHORT).show()
return@setOnClickListener
}
if (password.length != 6) {
Toast.makeText(this, getString(R.string.password_must_be_6_digits), Toast.LENGTH_SHORT).show()
return@setOnClickListener
}
if (confirmPassword.isEmpty()) {
Toast.makeText(this, getString(R.string.please_confirm_password), Toast.LENGTH_SHORT).show()
return@setOnClickListener
}
if (password != confirmPassword) {
Toast.makeText(this, getString(R.string.password_mismatch), Toast.LENGTH_SHORT).show()
return@setOnClickListener
}
SPUtils.getInstance().put("operation_password", password)
Toast.makeText(this, getString(R.string.operation_success), Toast.LENGTH_SHORT).show()
}
}
}

View File

@@ -0,0 +1,75 @@
package com.example.defenseapplication.personal
import android.content.Intent
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.example.defenseapplication.R
import com.example.defenseapplication.databinding.PasswordManagementActivityBinding
import com.example.defenseapplication.view.PasswordInputDialog
import com.blankj.utilcode.util.SPUtils
import com.gyf.immersionbar.ImmersionBar
//密码管理
class PasswordManagementActivity : AppCompatActivity() {
private lateinit var binding: PasswordManagementActivityBinding
private lateinit var passwordDialog: PasswordInputDialog
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = PasswordManagementActivityBinding.inflate(layoutInflater)
setContentView(binding.root)
ImmersionBar.with(this)
.statusBarDarkFont(true)
.titleBar(binding.topBar)
.init()
binding.ivBack.setOnClickListener {
finish()
}
binding.loginPassword.setOnClickListener {
startActivity(Intent(this, LoginPasswordActivity::class.java))
}
binding.retrievePassword.setOnClickListener {
startActivity(Intent(this, RetrievePasswordActivity::class.java))
}
binding.operationPassword.setOnClickListener {
showPasswordDialog()
}
}
private fun showPasswordDialog() {
passwordDialog = PasswordInputDialog(this).apply {
setOnConfirmListener { inputPassword ->
val savedPassword = SPUtils.getInstance().getString("operation_password", "111111")
if (savedPassword.isEmpty()) {
Toast.makeText(this@PasswordManagementActivity, getString(R.string.operation_password_not_set), Toast.LENGTH_SHORT).show()
dismiss()
return@setOnConfirmListener
}
if (inputPassword == savedPassword) {
startActivity(Intent(this@PasswordManagementActivity, OperationPasswordActivity::class.java))
dismiss()
} else {
showError(getString(R.string.password_error))
clearPassword()
}
}
setOnDismissListener {
// Dialog dismissed
}
}
passwordDialog.show()
}
override fun onDestroy() {
if (::passwordDialog.isInitialized) {
passwordDialog.dismiss()
}
super.onDestroy()
}
}

View File

@@ -0,0 +1,126 @@
package com.example.defenseapplication.personal
import android.os.Bundle
import android.os.CountDownTimer
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.example.defenseapplication.R
import com.example.defenseapplication.databinding.RetrievePasswordActivityBinding
import com.gyf.immersionbar.ImmersionBar
//找回密码页面
class RetrievePasswordActivity : AppCompatActivity() {
private lateinit var binding: RetrievePasswordActivityBinding
private var countDownTimer: CountDownTimer? = null
private var isCountingDown = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = RetrievePasswordActivityBinding.inflate(layoutInflater)
setContentView(binding.root)
ImmersionBar.with(this)
.statusBarDarkFont(true)
.titleBar(binding.topBar)
.init()
initListener()
}
private fun initListener() {
binding.ivBack.setOnClickListener {
finish()
}
binding.btnGetCode.setOnClickListener {
val phoneNumber = binding.etPhoneNumber.text.toString()
if (phoneNumber.isEmpty()) {
Toast.makeText(this, getString(R.string.enter_phone_number), Toast.LENGTH_SHORT).show()
return@setOnClickListener
}
if (phoneNumber.length != 11) {
Toast.makeText(this, getString(R.string.phone_format_invalid), Toast.LENGTH_SHORT).show()
return@setOnClickListener
}
startCountdown()
Toast.makeText(this, String.format(getString(R.string.code_sent_to), phoneNumber), Toast.LENGTH_SHORT).show()
}
binding.btnConfirmReset.setOnClickListener {
val phoneNumber = binding.etPhoneNumber.text.toString()
val verificationCode = binding.etVerificationCode.text.toString()
val newPassword = binding.etNewPassword.text.toString()
val confirmPassword = binding.etConfirmPassword.text.toString()
if (phoneNumber.isEmpty()) {
Toast.makeText(this, getString(R.string.enter_phone_number), Toast.LENGTH_SHORT).show()
return@setOnClickListener
}
if (phoneNumber.length != 11) {
Toast.makeText(this, getString(R.string.phone_format_invalid), Toast.LENGTH_SHORT).show()
return@setOnClickListener
}
if (verificationCode.isEmpty()) {
Toast.makeText(this, getString(R.string.enter_verification_code_pls), Toast.LENGTH_SHORT).show()
return@setOnClickListener
}
if (verificationCode.length != 6) {
Toast.makeText(this, getString(R.string.verification_code_error), Toast.LENGTH_SHORT).show()
return@setOnClickListener
}
if (newPassword.isEmpty()) {
Toast.makeText(this, getString(R.string.password_cannot_empty), Toast.LENGTH_SHORT).show()
return@setOnClickListener
}
if (newPassword.length < 6 || newPassword.length > 20) {
Toast.makeText(this, getString(R.string.password_requirement), Toast.LENGTH_SHORT).show()
return@setOnClickListener
}
if (confirmPassword.isEmpty()) {
Toast.makeText(this, getString(R.string.enter_password_again), Toast.LENGTH_SHORT).show()
return@setOnClickListener
}
if (newPassword != confirmPassword) {
Toast.makeText(this, getString(R.string.password_mismatch), Toast.LENGTH_SHORT).show()
return@setOnClickListener
}
Toast.makeText(this, getString(R.string.reset_success), Toast.LENGTH_SHORT).show()
finish()
}
}
private fun startCountdown() {
isCountingDown = true
binding.btnGetCode.isEnabled = false
countDownTimer = object : CountDownTimer(60000, 1000) {
override fun onTick(millisUntilFinished: Long) {
val seconds = millisUntilFinished / 1000
binding.btnGetCode.text = String.format(getString(R.string.countdown_retry), seconds)
}
override fun onFinish() {
isCountingDown = false
binding.btnGetCode.isEnabled = true
binding.btnGetCode.text = getString(R.string.get_verification_code)
}
}.start()
}
override fun onDestroy() {
super.onDestroy()
countDownTimer?.cancel()
}
}