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 // 避免内存泄漏 } }