diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e493fc0..a91f23f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -55,6 +55,7 @@ + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e493fc0..a91f23f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -55,6 +55,7 @@ + diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt index dab1cb9..107f919 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt @@ -14,8 +14,8 @@ import com.casic.smart.town.sanxi.util.AuthenticationHelper import com.casic.smart.town.sanxi.util.LoadingDialogHub import com.casic.smart.town.sanxi.util.LocaleConstant -import com.casic.smart.town.sanxi.util.RSAUtils import com.casic.smart.town.sanxi.view.AboutUsActivity +import com.casic.smart.town.sanxi.view.ChangePasswordActivity import com.casic.smart.town.sanxi.view.LoginActivity import com.casic.smart.town.sanxi.view.UpdateDataActivity import com.casic.smart.town.sanxi.vm.LoginViewModel @@ -30,10 +30,8 @@ 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_more.* import java.io.File -import java.nio.charset.StandardCharsets class MorePageFragment : KotlinBaseFragment() { @@ -68,20 +66,6 @@ } override fun observeRequestState() { - userViewModel.loadState.observe(this, { - when (it) { - is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "修改中,请稍后") - is LoadState.Success -> { - "修改成功,请重新登录".show(requireContext()) - LoadingDialogHub.dismiss() - AuthenticationHelper.removeToken() - requireContext().navigatePageTo() - PageNavigationManager.finishAllActivity() - } - else -> LoadingDialogHub.dismiss() - } - }) - versionViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "检查版本中,请稍后") @@ -105,24 +89,7 @@ } 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() + requireContext().navigatePageTo() } aboutUsLayout.setOnClickListener { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e493fc0..a91f23f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -55,6 +55,7 @@ + diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt index dab1cb9..107f919 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt @@ -14,8 +14,8 @@ import com.casic.smart.town.sanxi.util.AuthenticationHelper import com.casic.smart.town.sanxi.util.LoadingDialogHub import com.casic.smart.town.sanxi.util.LocaleConstant -import com.casic.smart.town.sanxi.util.RSAUtils import com.casic.smart.town.sanxi.view.AboutUsActivity +import com.casic.smart.town.sanxi.view.ChangePasswordActivity import com.casic.smart.town.sanxi.view.LoginActivity import com.casic.smart.town.sanxi.view.UpdateDataActivity import com.casic.smart.town.sanxi.vm.LoginViewModel @@ -30,10 +30,8 @@ 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_more.* import java.io.File -import java.nio.charset.StandardCharsets class MorePageFragment : KotlinBaseFragment() { @@ -68,20 +66,6 @@ } override fun observeRequestState() { - userViewModel.loadState.observe(this, { - when (it) { - is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "修改中,请稍后") - is LoadState.Success -> { - "修改成功,请重新登录".show(requireContext()) - LoadingDialogHub.dismiss() - AuthenticationHelper.removeToken() - requireContext().navigatePageTo() - PageNavigationManager.finishAllActivity() - } - else -> LoadingDialogHub.dismiss() - } - }) - versionViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "检查版本中,请稍后") @@ -105,24 +89,7 @@ } 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() + requireContext().navigatePageTo() } aboutUsLayout.setOnClickListener { diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/ChangePasswordActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/ChangePasswordActivity.kt new file mode 100644 index 0000000..6d72568 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/ChangePasswordActivity.kt @@ -0,0 +1,103 @@ +package com.casic.smart.town.sanxi.view + +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.util.AuthenticationHelper +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.RSAUtils +import com.casic.smart.town.sanxi.vm.UserViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.isLetterAndDigit +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.PageNavigationManager +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_change_pwd.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.nio.charset.StandardCharsets + +class ChangePasswordActivity : KotlinBaseActivity() { + + private lateinit var userViewModel: UserViewModel + + override fun initLayoutView(): Int = R.layout.activity_change_pwd + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "修改密码" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) + } + + override fun observeRequestState() { + userViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "修改中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + AuthenticationHelper.removeToken() + this.navigatePageTo() + PageNavigationManager.finishAllActivity() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + submitButton.setOnClickListener { + /** + * isEmpty 认为空格(无论单空格还是多空格)都是不是空. + * isBlank 认为空格,换行符号(\n),tab(\t)都是空. + * */ + val oldPassword: String = oldPasswordView.text.toString().trim() + if (oldPassword.isBlank()) { + "请先输入原密码".show(this) + return@setOnClickListener + } + val newPassword: String = newPasswordView.text.toString().trim() + if (newPassword.isBlank()) { + "请先输入原密码".show(this) + return@setOnClickListener + } + val repeatPassword: String = repeatPasswordView.text.toString().trim() + if (repeatPassword.isBlank()) { + "请再次输入新密码".show(this) + return@setOnClickListener + } + if (newPassword != repeatPassword) { + "新密码和确认密码输入不一致,请重新输入".show(this) + return@setOnClickListener + } + if (newPassword.length < 8 || newPassword.length > 16) { + "新密码长度不正确,请重新输入".show(this) + return@setOnClickListener + } + if (!newPassword.isLetterAndDigit()) { + "新密码请输入8-16位的数字字母组合".show(this) + return@setOnClickListener + } + //数据校验OK,可以修改密码 + val publicKey = RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!! + val oldPassKey = RSAUtils.encryptDataByPublicKey( + oldPassword.toByteArray(StandardCharsets.UTF_8), + publicKey + ) + val newPassKey = RSAUtils.encryptDataByPublicKey( + newPassword.toByteArray(StandardCharsets.UTF_8), + publicKey + ) + userViewModel.changePassword(oldPwd = oldPassKey, newPwd = newPassKey) + } + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e493fc0..a91f23f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -55,6 +55,7 @@ + diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt index dab1cb9..107f919 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt @@ -14,8 +14,8 @@ import com.casic.smart.town.sanxi.util.AuthenticationHelper import com.casic.smart.town.sanxi.util.LoadingDialogHub import com.casic.smart.town.sanxi.util.LocaleConstant -import com.casic.smart.town.sanxi.util.RSAUtils import com.casic.smart.town.sanxi.view.AboutUsActivity +import com.casic.smart.town.sanxi.view.ChangePasswordActivity import com.casic.smart.town.sanxi.view.LoginActivity import com.casic.smart.town.sanxi.view.UpdateDataActivity import com.casic.smart.town.sanxi.vm.LoginViewModel @@ -30,10 +30,8 @@ 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_more.* import java.io.File -import java.nio.charset.StandardCharsets class MorePageFragment : KotlinBaseFragment() { @@ -68,20 +66,6 @@ } override fun observeRequestState() { - userViewModel.loadState.observe(this, { - when (it) { - is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "修改中,请稍后") - is LoadState.Success -> { - "修改成功,请重新登录".show(requireContext()) - LoadingDialogHub.dismiss() - AuthenticationHelper.removeToken() - requireContext().navigatePageTo() - PageNavigationManager.finishAllActivity() - } - else -> LoadingDialogHub.dismiss() - } - }) - versionViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "检查版本中,请稍后") @@ -105,24 +89,7 @@ } 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() + requireContext().navigatePageTo() } aboutUsLayout.setOnClickListener { diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/ChangePasswordActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/ChangePasswordActivity.kt new file mode 100644 index 0000000..6d72568 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/ChangePasswordActivity.kt @@ -0,0 +1,103 @@ +package com.casic.smart.town.sanxi.view + +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.util.AuthenticationHelper +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.RSAUtils +import com.casic.smart.town.sanxi.vm.UserViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.isLetterAndDigit +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.PageNavigationManager +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_change_pwd.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.nio.charset.StandardCharsets + +class ChangePasswordActivity : KotlinBaseActivity() { + + private lateinit var userViewModel: UserViewModel + + override fun initLayoutView(): Int = R.layout.activity_change_pwd + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "修改密码" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) + } + + override fun observeRequestState() { + userViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "修改中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + AuthenticationHelper.removeToken() + this.navigatePageTo() + PageNavigationManager.finishAllActivity() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + submitButton.setOnClickListener { + /** + * isEmpty 认为空格(无论单空格还是多空格)都是不是空. + * isBlank 认为空格,换行符号(\n),tab(\t)都是空. + * */ + val oldPassword: String = oldPasswordView.text.toString().trim() + if (oldPassword.isBlank()) { + "请先输入原密码".show(this) + return@setOnClickListener + } + val newPassword: String = newPasswordView.text.toString().trim() + if (newPassword.isBlank()) { + "请先输入原密码".show(this) + return@setOnClickListener + } + val repeatPassword: String = repeatPasswordView.text.toString().trim() + if (repeatPassword.isBlank()) { + "请再次输入新密码".show(this) + return@setOnClickListener + } + if (newPassword != repeatPassword) { + "新密码和确认密码输入不一致,请重新输入".show(this) + return@setOnClickListener + } + if (newPassword.length < 8 || newPassword.length > 16) { + "新密码长度不正确,请重新输入".show(this) + return@setOnClickListener + } + if (!newPassword.isLetterAndDigit()) { + "新密码请输入8-16位的数字字母组合".show(this) + return@setOnClickListener + } + //数据校验OK,可以修改密码 + val publicKey = RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!! + val oldPassKey = RSAUtils.encryptDataByPublicKey( + oldPassword.toByteArray(StandardCharsets.UTF_8), + publicKey + ) + val newPassKey = RSAUtils.encryptDataByPublicKey( + newPassword.toByteArray(StandardCharsets.UTF_8), + publicKey + ) + userViewModel.changePassword(oldPwd = oldPassKey, newPwd = newPassKey) + } + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_change_pwd.xml b/app/src/main/res/layout/activity_change_pwd.xml new file mode 100644 index 0000000..5bc4d0f --- /dev/null +++ b/app/src/main/res/layout/activity_change_pwd.xml @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +