Files
SecurityDefenseDevice/app/src/main/java/com/example/defenseapplication/home/PersonalFragment.kt
2026-05-16 17:18:05 +08:00

164 lines
6.2 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.example.defenseapplication.R
import com.example.defenseapplication.databinding.PersonalFragmentBinding
import com.example.defenseapplication.liveVideo.LinkedUserActivity
import com.example.defenseapplication.personal.PasswordManagementActivity
import com.example.defenseapplication.personal.PersonalProfileActivity
import com.example.defenseapplication.utils.LanguageUtil
import com.example.defenseapplication.utils.RetrofitNetwork
import com.example.defenseapplication.utils.UserinfoUtil
import com.example.defenseapplication.view.FamilySwitchDialog
import com.example.defenseapplication.view.LanguageDialog
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 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.drawable.img)
.circleCrop()
.into(binding.ivAvatar)
binding.headerLayout.setOnClickListener {
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)
}
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() {
val currentLang = LanguageUtil.getCurrentLanguage(requireContext())
binding.tvCurrentLanguage.text = LanguageUtil.getLanguageDisplayName(currentLang)
}
/**
* 显示语言选择对话框
*/
private fun showLanguageDialog() {
val dialog = LanguageDialog(requireContext()) { language ->
LanguageUtil.switchLanguage(requireContext(), language)
// 刷新当前页面以应用新语言
requireActivity().recreate()
}
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
}
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null // 避免内存泄漏
}
}