268 lines
10 KiB
Kotlin
268 lines
10 KiB
Kotlin
package com.example.defenseapplication.home
|
||
|
||
import android.content.Intent
|
||
import android.os.Bundle
|
||
import androidx.fragment.app.Fragment
|
||
import android.view.LayoutInflater
|
||
import android.view.View
|
||
import android.view.ViewGroup
|
||
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.UserInfoBean
|
||
import com.example.defenseapplication.databinding.PersonalFragmentBinding
|
||
import com.example.defenseapplication.liveVideo.LinkedUserActivity
|
||
import com.example.defenseapplication.personal.FaceManagementActivity
|
||
import com.example.defenseapplication.personal.PasswordManagementActivity
|
||
import com.example.defenseapplication.personal.PersonalProfileActivity
|
||
import com.example.defenseapplication.utils.AppLanguage
|
||
import com.example.defenseapplication.utils.LanguageUtil
|
||
import com.example.defenseapplication.utils.RetrofitNetwork
|
||
import com.example.defenseapplication.utils.UserinfoUtil
|
||
import com.example.defenseapplication.utils.ActivityManager
|
||
import com.example.defenseapplication.view.FamilySwitchDialog
|
||
import com.example.defenseapplication.view.LanguageDialog
|
||
import com.example.defenseapplication.home.HomeActivity
|
||
import com.gyf.immersionbar.ImmersionBar
|
||
import kotlinx.coroutines.CoroutineScope
|
||
import kotlinx.coroutines.Dispatchers
|
||
import kotlinx.coroutines.launch
|
||
import kotlinx.coroutines.withContext
|
||
//我的碎片
|
||
class PersonalFragment : Fragment() {
|
||
// ViewBinding
|
||
private var _binding: PersonalFragmentBinding? = null
|
||
private val binding get() = _binding!!
|
||
override fun onResume() {
|
||
super.onResume()
|
||
fetchUserInfo()
|
||
}
|
||
override fun onCreateView(
|
||
inflater: LayoutInflater,
|
||
container: ViewGroup?,
|
||
savedInstanceState: Bundle?
|
||
): View {
|
||
_binding = PersonalFragmentBinding.inflate(inflater, container, false)
|
||
ImmersionBar.with(this)
|
||
.statusBarDarkFont(true)
|
||
.titleBar(binding.headerLayout)
|
||
.init()
|
||
Glide.with(this)
|
||
.load(R.mipmap.img)
|
||
.circleCrop()
|
||
.into(binding.ivAvatar)
|
||
binding.headerLayout.setOnClickListener {
|
||
CoroutineScope(Dispatchers.IO).launch {
|
||
try {
|
||
val response = RetrofitNetwork.getNetworkService().getUserInfo()
|
||
withContext(Dispatchers.Main) {
|
||
if (response.code == 200 && response.data != null) {
|
||
val intent = Intent(requireContext(), PersonalProfileActivity::class.java)
|
||
intent.putExtra("userInfo", response.data)
|
||
startActivity(intent)
|
||
} else {
|
||
val intent = Intent(requireContext(), PersonalProfileActivity::class.java)
|
||
startActivity(intent)
|
||
}
|
||
}
|
||
} catch (e: Exception) {
|
||
e.printStackTrace()
|
||
val intent = Intent(requireContext(), PersonalProfileActivity::class.java)
|
||
startActivity(intent)
|
||
}
|
||
}
|
||
}
|
||
// 更新当前语言显示
|
||
updateCurrentLanguageDisplay()
|
||
// 语言设置点击事件
|
||
binding.itemLanguage.setOnClickListener {
|
||
showLanguageDialog()
|
||
}
|
||
// 切换家庭点击事件
|
||
binding.itemSwitchFamily.setOnClickListener {
|
||
showFamilySwitchDialog()
|
||
}
|
||
//用户管理点击事件跳转关联用户页面
|
||
binding.itemUserManage.setOnClickListener {
|
||
val intent = Intent(requireContext(), LinkedUserActivity::class.java)
|
||
intent.putExtra(LinkedUserActivity.EXTRA_MODE, LinkedUserActivity.MODE_PERSONAL)
|
||
startActivity(intent)
|
||
}
|
||
// 密码管理点击事件
|
||
binding.itemPwdManage.setOnClickListener {
|
||
val intent= Intent(requireContext(), PasswordManagementActivity::class.java)
|
||
startActivity(intent)
|
||
}
|
||
//人脸管理点击事件跳转人脸管理页面
|
||
binding.itemFaceManage.setOnClickListener {
|
||
val intent= Intent(requireContext(), FaceManagementActivity::class.java)
|
||
startActivity(intent)
|
||
}
|
||
// 退出登录点击事件
|
||
binding.btnLogout.setOnClickListener {
|
||
CoroutineScope(Dispatchers.IO).launch {
|
||
try {
|
||
val response = RetrofitNetwork.getNetworkService().logout()
|
||
withContext(Dispatchers.Main) {
|
||
if (response.code == 200) {
|
||
UserinfoUtil.clearUserInfo()
|
||
val intent = Intent(requireContext(), com.example.defenseapplication.login.LoginActivity::class.java)
|
||
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
|
||
startActivity(intent)
|
||
requireActivity().finish()
|
||
} else {
|
||
Toast.makeText(requireContext(), getString(R.string.logout_fail), Toast.LENGTH_SHORT).show()
|
||
}
|
||
}
|
||
} catch (e: Exception) {
|
||
e.printStackTrace()
|
||
withContext(Dispatchers.Main) {
|
||
Toast.makeText(requireContext(), getString(R.string.logout_fail), Toast.LENGTH_SHORT).show()
|
||
}
|
||
}
|
||
}
|
||
}
|
||
fetchCurrentFamily()
|
||
return binding.root
|
||
}
|
||
|
||
private fun fetchCurrentFamily() {
|
||
CoroutineScope(Dispatchers.IO).launch {
|
||
try {
|
||
val response = RetrofitNetwork.getNetworkService().getFamilyList()
|
||
withContext(Dispatchers.Main) {
|
||
if (response.code == 200 && response.data != null) {
|
||
val userInfo = UserinfoUtil.getUserInfo()
|
||
val currentFamily = response.data.find {
|
||
it.role == userInfo?.role && it.role != "member"
|
||
} ?: response.data.firstOrNull()
|
||
currentFamily?.let {
|
||
val isAdmin = it.role == "appadmin"
|
||
if (isAdmin) {
|
||
binding.tvCurrentFamily.text = getString(R.string.my_family)
|
||
} else {
|
||
binding.tvCurrentFamily.text = "${it.parentName}${getString(R.string.family_with_normal)}"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
} catch (e: Exception) {
|
||
e.printStackTrace()
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* 更新当前语言显示
|
||
*/
|
||
private fun updateCurrentLanguageDisplay() {
|
||
binding.tvCurrentLanguage.text = LanguageUtil.currentLanguage.let {
|
||
if (it == AppLanguage.SIMPLIFIED_CHINESE) "中文" else "English"
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 显示语言选择对话框
|
||
*/
|
||
private fun showLanguageDialog() {
|
||
val dialog = LanguageDialog(requireContext()) { appLanguage ->
|
||
LanguageUtil.switchLanguage(requireContext(), appLanguage)
|
||
// 关闭所有 Activity,重启到首页
|
||
ActivityManager.finishAllActivities()
|
||
val intent = Intent(requireContext(), HomeActivity::class.java)
|
||
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
|
||
startActivity(intent)
|
||
requireActivity().finish()
|
||
}
|
||
dialog.show()
|
||
}
|
||
|
||
/**
|
||
* 显示家庭切换对话框
|
||
*/
|
||
private fun showFamilySwitchDialog() {
|
||
val dialog = FamilySwitchDialog(requireContext()) { familyName ->
|
||
updateFamilyDisplay(familyName)
|
||
}
|
||
dialog.show()
|
||
}
|
||
|
||
private fun updateFamilyDisplay(familyName: String) {
|
||
CoroutineScope(Dispatchers.IO).launch {
|
||
try {
|
||
val response = RetrofitNetwork.getNetworkService().getFamilyList()
|
||
withContext(Dispatchers.Main) {
|
||
if (response.code == 200 && response.data != null) {
|
||
val family = response.data.find { it.parentName == familyName }
|
||
family?.let {
|
||
val isAdmin = it.role == "appadmin"
|
||
if (isAdmin) {
|
||
binding.tvCurrentFamily.text = getString(R.string.my_family)
|
||
} else {
|
||
binding.tvCurrentFamily.text = "${it.parentName}${getString(R.string.family_with_normal)}"
|
||
}
|
||
} ?: run {
|
||
binding.tvCurrentFamily.text = familyName
|
||
}
|
||
} else {
|
||
binding.tvCurrentFamily.text = familyName
|
||
}
|
||
}
|
||
} catch (e: Exception) {
|
||
e.printStackTrace()
|
||
binding.tvCurrentFamily.text = familyName
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
|
||
private fun fetchUserInfo() {
|
||
CoroutineScope(Dispatchers.IO).launch {
|
||
try {
|
||
val response = RetrofitNetwork.getNetworkService().getUserInfo()
|
||
withContext(Dispatchers.Main) {
|
||
if (response.code == 200 && response.data != null) {
|
||
updateUserUI(response.data)
|
||
}
|
||
}
|
||
} catch (e: Exception) {
|
||
e.printStackTrace()
|
||
}
|
||
}
|
||
}
|
||
|
||
private fun updateUserUI(userInfo: UserInfoBean) {
|
||
userInfo.nickName?.let {
|
||
binding.tvNickname.text = it
|
||
}
|
||
userInfo.phonenumber?.let {
|
||
binding.tvPhone.text = it
|
||
}
|
||
userInfo.avatar?.let {
|
||
val requestOptions = RequestOptions()
|
||
.placeholder(R.mipmap.img) // 加载中显示
|
||
.error(R.mipmap.img) // 失败时显示
|
||
|
||
Glide.with(this)
|
||
.load(it) // 如果 avatar 为 null,Glide 会直接回调 error
|
||
.apply(requestOptions)
|
||
.circleCrop()
|
||
.into(binding.ivAvatar)
|
||
}
|
||
userInfo.role?.let {
|
||
binding.tvRoleTag.text = if (it == "appadmin") {
|
||
getString(R.string.admin)
|
||
} else {
|
||
getString(R.string.member)
|
||
}
|
||
}
|
||
}
|
||
|
||
override fun onDestroyView() {
|
||
super.onDestroyView()
|
||
_binding = null // 避免内存泄漏
|
||
}
|
||
} |