package com.casic.smarttube.fragment import androidx.lifecycle.ViewModelProvider import com.casic.smarttube.R import com.casic.smarttube.model.UserDetailModel import com.casic.smarttube.utils.AuthenticationHelper import com.casic.smarttube.utils.DialogHelper import com.casic.smarttube.utils.LocalConstant import com.casic.smarttube.utils.RSAUtils import com.casic.smarttube.view.LoginActivity import com.casic.smarttube.vm.LoginViewModel import com.casic.smarttube.vm.UserViewModel import com.google.gson.Gson import com.google.gson.reflect.TypeToken import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.PageNavigationManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.vm.LoadState import com.pengxh.kt.lite.widget.dialog.AlertControlDialog import com.pengxh.kt.lite.widget.dialog.ChangePasswordDialog import kotlinx.android.synthetic.main.fragment_mine.* import java.nio.charset.StandardCharsets class MinePageFragment : KotlinBaseFragment() { private val kTag = "MinePageFragment" private lateinit var userData: UserDetailModel.Data private lateinit var userViewModel: UserViewModel private lateinit var loginViewModel: LoginViewModel override fun initLayoutView(): Int = R.layout.fragment_mine override fun setupTopBarLayout() { } override fun initData() { userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) } override fun initEvent() { userImageView.setOnClickListener { "尽情期待~".show(requireContext()) } updateUserButton.setOnClickListener { DialogHelper.showLoadingDialog(requireActivity(), "同步中,请稍后...") userViewModel.obtainUserDetail() } changePwdLayout.setOnClickListener { ChangePasswordDialog.Builder() .setContext(requireContext()) .setOnDialogButtonClickListener(object : ChangePasswordDialog.OnDialogButtonClickListener { override fun onConfirmClick(oldPwd: String, newPwd: String) { val publicKey = RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!! val oldPassKey = RSAUtils.encryptDataByPublicKey( oldPwd.toByteArray(StandardCharsets.UTF_8), publicKey ) val newPassKey = RSAUtils.encryptDataByPublicKey( newPwd.toByteArray(StandardCharsets.UTF_8), publicKey ) userViewModel.changePassword(oldPassKey, newPassKey) } }).build().show() } loginOutButton.setOnClickListener { AlertControlDialog.Builder() .setContext(requireContext()) .setTitle("退出登录") .setMessage("确定要退出吗?") .setNegativeButton("取消") .setPositiveButton("确定") .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { loginViewModel.out() } override fun onCancelClick() {} }).build().show() } /** * 数据监听 * */ dataObserve() } private fun dataObserve() { /** * 用户信息数据监听 * */ userViewModel.userDetailModel.observe(this, { if (it.code == 200) { DialogHelper.dismissLoadingDialog() "同步完成".show(requireContext()) userData = it.data } }) userViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { DialogHelper.showLoadingDialog(requireActivity(), "修改中,请稍后") } is LoadState.Success -> { DialogHelper.dismissLoadingDialog() AuthenticationHelper.removeToken() requireContext().navigatePageTo<LoginActivity>() PageNavigationManager.finishAllActivity() } else -> { DialogHelper.dismissLoadingDialog() } } }) loginViewModel.outResultModel.observe(this, { if (it.code == 200) { AuthenticationHelper.removeToken() requireContext().navigatePageTo<LoginActivity>() PageNavigationManager.finishAllActivity() } }) } override fun onResume() { val userDetailJson = SaveKeyValues.getValue(LocalConstant.USER_DETAIL_MODEL, "") as String if (userDetailJson.isNotBlank()) { userData = Gson().fromJson( userDetailJson, object : TypeToken<UserDetailModel.Data>() {}.type ) updateUserInfo() } super.onResume() } private fun updateUserInfo() { userNameView.text = userData.name userPhoneView.text = String.format("电话:${userData.phone}") userDeptView.text = String.format("部门:${userData.deptName}") } }