155 lines
6.2 KiB
Kotlin
155 lines
6.2 KiB
Kotlin
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 为 null,Glide 会直接回调 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()
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|