Files
SecurityDefenseDevice/app/src/main/java/com/example/defenseapplication/personal/PersonalProfileActivity.kt
2026-05-22 15:51:13 +08:00

155 lines
6.2 KiB
Kotlin
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package com.example.defenseapplication.personal
import android.os.Build
import android.os.Bundle
import android.util.Log
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import android.widget.Toast
import com.bumptech.glide.Glide
import com.bumptech.glide.request.RequestOptions
import com.example.defenseapplication.R
import com.example.defenseapplication.bean.UpdateUserInfo
import com.example.defenseapplication.bean.UserInfoBean
import com.example.defenseapplication.databinding.PersonalProfileActivityBinding
import com.example.defenseapplication.utils.RetrofitNetwork
import com.example.defenseapplication.view.CustomDialogFragmentText
import com.example.defenseapplication.view.PhoneModifyDialogFragment
import com.gyf.immersionbar.ImmersionBar
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
//个人资料
class PersonalProfileActivity : AppCompatActivity() {
private lateinit var binding: PersonalProfileActivityBinding
private var userInfo: UserInfoBean? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = PersonalProfileActivityBinding.inflate(layoutInflater)
setContentView(binding.root)
ImmersionBar.with(this)
.statusBarDarkFont(true)
.titleBar(binding.topBar)
.init()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
userInfo = intent.getParcelableExtra("userInfo", UserInfoBean::class.java)
}
initView()
}
private fun initView() {
binding.ivBack.setOnClickListener {
finish()
}
userInfo?.let { info ->
Log.d("头像", "头像 URL = ${info.avatar}")
val requestOptions = RequestOptions()
.placeholder(R.drawable.img) // 加载中显示
.error(R.drawable.img) // 失败时显示
Glide.with(this)
.load(info.avatar) // 如果 avatar 为 nullGlide 会直接回调 error
.apply(requestOptions)
.circleCrop()
.into(binding.ivAvatar)
binding.tvNickname.text = info.nickName ?: getString(R.string.nickname_default)
binding.tvPhone.text = info.phonenumber ?: ""
}
binding.itemNickname.setOnClickListener {
showNicknameDialog()
}
binding.itemPhone.setOnClickListener {
showPhoneDialog()
}
}
private fun showNicknameDialog() {
val currentNickname = binding.tvNickname.text.toString()
val dialog = CustomDialogFragmentText()
.setTitle(getString(R.string.set_name))
.setMessage("")
.setInputHint(getString(R.string.nickname_hint))
.setInputText(currentNickname)
.setShowInput(true)
.setPositiveText(getString(R.string.confirm))
.setNegativeText("")
.setOnConfirmListener { newNickname ->
if (newNickname.isNotBlank()) {
updateNickname(newNickname)
}
}
dialog.show(supportFragmentManager, "nickname_dialog")
}
private fun updateNickname(newNickname: String) {
CoroutineScope(Dispatchers.IO).launch {
try {
val request = UpdateUserInfo(
userId = userInfo?.userId,
nickName = newNickname
)
val response = RetrofitNetwork.getNetworkService().updateUserInfo(request)
withContext(Dispatchers.Main) {
if (response.code == 200) {
binding.tvNickname.text = newNickname
userInfo = userInfo?.copy(nickName = newNickname)
Toast.makeText(this@PersonalProfileActivity, getString(R.string.operation_success), Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(this@PersonalProfileActivity, getString(R.string.operation_failed), Toast.LENGTH_SHORT).show()
}
}
} catch (e: Exception) {
e.printStackTrace()
withContext(Dispatchers.Main) {
Toast.makeText(this@PersonalProfileActivity, getString(R.string.network_error), Toast.LENGTH_SHORT).show()
}
}
}
}
private fun showPhoneDialog() {
val dialog = PhoneModifyDialogFragment()
.setTitle(getString(R.string.modify_phone))
.setNegativeText(getString(R.string.cancel))
.setPositiveText(getString(R.string.verify_and_bind))
.setOnConfirmListener { phone, code ->
updatePhone(phone, code)
}
dialog.show(supportFragmentManager, "phone_dialog")
}
private fun updatePhone(phone: String, code: String) {
CoroutineScope(Dispatchers.IO).launch {
try {
val request = UpdateUserInfo(
userId = userInfo?.userId,
phonenumber = phone,
smsCoode = code
)
val response = RetrofitNetwork.getNetworkService().updateUserInfo(request)
withContext(Dispatchers.Main) {
if (response.code == 200) {
binding.tvPhone.text = phone
userInfo = userInfo?.copy(phonenumber = phone)
Toast.makeText(this@PersonalProfileActivity, getString(R.string.operation_success), Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(this@PersonalProfileActivity, getString(R.string.operation_failed), Toast.LENGTH_SHORT).show()
}
}
} catch (e: Exception) {
e.printStackTrace()
withContext(Dispatchers.Main) {
Toast.makeText(this@PersonalProfileActivity, getString(R.string.network_error), Toast.LENGTH_SHORT).show()
}
}
}
}
}