diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5b6f9b2..099eb12 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -42,6 +42,7 @@
android:name=".view.BigImageActivity"
android:theme="@style/Theme.BigImageActivity" />
+
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5b6f9b2..099eb12 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -42,6 +42,7 @@
android:name=".view.BigImageActivity"
android:theme="@style/Theme.BigImageActivity" />
+
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
index a4f3c46..1a844cd 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
@@ -36,6 +36,15 @@
): String
/**
+ * 修改密码
+ */
+ @POST("/sys/mgr/changePwd")
+ suspend fun changePassword(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
+
+ /**
* 获取字典
*/
@GET("/sys/dict/code/{dictCode}")
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5b6f9b2..099eb12 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -42,6 +42,7 @@
android:name=".view.BigImageActivity"
android:theme="@style/Theme.BigImageActivity" />
+
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
index a4f3c46..1a844cd 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
@@ -36,6 +36,15 @@
): String
/**
+ * 修改密码
+ */
+ @POST("/sys/mgr/changePwd")
+ suspend fun changePassword(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
+
+ /**
* 获取字典
*/
@GET("/sys/dict/code/{dictCode}")
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
index 8bf4070..afa53cf 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
@@ -15,6 +15,7 @@
import okhttp3.MultipartBody
import okhttp3.RequestBody.Companion.asRequestBody
import okhttp3.RequestBody.Companion.toRequestBody
+import org.json.JSONObject
import java.io.File
@@ -88,6 +89,19 @@
}
/**
+ * 修改密码
+ */
+ suspend fun changePassword(oldPwd: String, newPwd: String): String {
+ val paramObject = JSONObject()
+ paramObject.put("oldPwd", oldPwd)
+ paramObject.put("newPwd", newPwd)
+ val requestBody = paramObject.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.changePassword(AuthenticationHelper.token!!, requestBody)
+ }
+
+ /**
* 获取字典
*/
suspend fun getDictionaryByCode(dictCode: String): String {
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5b6f9b2..099eb12 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -42,6 +42,7 @@
android:name=".view.BigImageActivity"
android:theme="@style/Theme.BigImageActivity" />
+
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
index a4f3c46..1a844cd 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
@@ -36,6 +36,15 @@
): String
/**
+ * 修改密码
+ */
+ @POST("/sys/mgr/changePwd")
+ suspend fun changePassword(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
+
+ /**
* 获取字典
*/
@GET("/sys/dict/code/{dictCode}")
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
index 8bf4070..afa53cf 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
@@ -15,6 +15,7 @@
import okhttp3.MultipartBody
import okhttp3.RequestBody.Companion.asRequestBody
import okhttp3.RequestBody.Companion.toRequestBody
+import org.json.JSONObject
import java.io.File
@@ -88,6 +89,19 @@
}
/**
+ * 修改密码
+ */
+ suspend fun changePassword(oldPwd: String, newPwd: String): String {
+ val paramObject = JSONObject()
+ paramObject.put("oldPwd", oldPwd)
+ paramObject.put("newPwd", newPwd)
+ val requestBody = paramObject.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.changePassword(AuthenticationHelper.token!!, requestBody)
+ }
+
+ /**
* 获取字典
*/
suspend fun getDictionaryByCode(dictCode: String): String {
diff --git a/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt
new file mode 100644
index 0000000..f68a025
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt
@@ -0,0 +1,99 @@
+package com.casic.xz.meterage.view
+
+import android.content.Intent
+import androidx.lifecycle.ViewModelProvider
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.utils.AuthenticationHelper
+import com.casic.xz.meterage.utils.LoadingDialogHub
+import com.casic.xz.meterage.utils.RSAUtils
+import com.casic.xz.meterage.vm.UserViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_forget_password.*
+import kotlinx.android.synthetic.main.include_base_title.*
+import java.nio.charset.StandardCharsets
+
+class ForgetPasswordActivity : KotlinBaseActivity() {
+
+ private lateinit var userViewModel: UserViewModel
+ private lateinit var newPassword: String
+
+ override fun initData() {
+ userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.changePwdResult.observe(this) {
+ if (it.code == 200) {
+ val intent = Intent()
+ intent.putExtra("newPassword", newPassword)
+ setResult(RESULT_OK, intent)
+ finish()
+ }
+ }
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+
+ 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 < 6 || newPassword.length > 16) {
+ "新密码长度不正确,请重新输入".show(this)
+ return@setOnClickListener
+ }
+ this.newPassword = newPassword
+
+ //数据校验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)
+ }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_forget_password
+
+ override fun observeRequestState() {
+ userViewModel.loadState.observe(this) {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "修改中,请稍后")
+ else -> LoadingDialogHub.dismiss()
+ }
+ }
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ titleView.text = "修改密码"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5b6f9b2..099eb12 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -42,6 +42,7 @@
android:name=".view.BigImageActivity"
android:theme="@style/Theme.BigImageActivity" />
+
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
index a4f3c46..1a844cd 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
@@ -36,6 +36,15 @@
): String
/**
+ * 修改密码
+ */
+ @POST("/sys/mgr/changePwd")
+ suspend fun changePassword(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
+
+ /**
* 获取字典
*/
@GET("/sys/dict/code/{dictCode}")
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
index 8bf4070..afa53cf 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
@@ -15,6 +15,7 @@
import okhttp3.MultipartBody
import okhttp3.RequestBody.Companion.asRequestBody
import okhttp3.RequestBody.Companion.toRequestBody
+import org.json.JSONObject
import java.io.File
@@ -88,6 +89,19 @@
}
/**
+ * 修改密码
+ */
+ suspend fun changePassword(oldPwd: String, newPwd: String): String {
+ val paramObject = JSONObject()
+ paramObject.put("oldPwd", oldPwd)
+ paramObject.put("newPwd", newPwd)
+ val requestBody = paramObject.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.changePassword(AuthenticationHelper.token!!, requestBody)
+ }
+
+ /**
* 获取字典
*/
suspend fun getDictionaryByCode(dictCode: String): String {
diff --git a/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt
new file mode 100644
index 0000000..f68a025
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt
@@ -0,0 +1,99 @@
+package com.casic.xz.meterage.view
+
+import android.content.Intent
+import androidx.lifecycle.ViewModelProvider
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.utils.AuthenticationHelper
+import com.casic.xz.meterage.utils.LoadingDialogHub
+import com.casic.xz.meterage.utils.RSAUtils
+import com.casic.xz.meterage.vm.UserViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_forget_password.*
+import kotlinx.android.synthetic.main.include_base_title.*
+import java.nio.charset.StandardCharsets
+
+class ForgetPasswordActivity : KotlinBaseActivity() {
+
+ private lateinit var userViewModel: UserViewModel
+ private lateinit var newPassword: String
+
+ override fun initData() {
+ userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.changePwdResult.observe(this) {
+ if (it.code == 200) {
+ val intent = Intent()
+ intent.putExtra("newPassword", newPassword)
+ setResult(RESULT_OK, intent)
+ finish()
+ }
+ }
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+
+ 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 < 6 || newPassword.length > 16) {
+ "新密码长度不正确,请重新输入".show(this)
+ return@setOnClickListener
+ }
+ this.newPassword = newPassword
+
+ //数据校验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)
+ }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_forget_password
+
+ override fun observeRequestState() {
+ userViewModel.loadState.observe(this) {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "修改中,请稍后")
+ else -> LoadingDialogHub.dismiss()
+ }
+ }
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ titleView.text = "修改密码"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt
index e8100d2..f26d40e 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt
@@ -1,5 +1,10 @@
package com.casic.xz.meterage.view
+import android.app.Activity
+import android.content.Intent
+import androidx.activity.result.ActivityResult
+import androidx.activity.result.ActivityResultCallback
+import androidx.activity.result.contract.ActivityResultContracts
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
import com.casic.xz.meterage.extensions.initLayoutImmersionBar
@@ -31,10 +36,24 @@
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
}
+ private val changePwdLauncher =
+ registerForActivityResult(
+ ActivityResultContracts.StartActivityForResult(),
+ object : ActivityResultCallback {
+ override fun onActivityResult(result: ActivityResult?) {
+ if (result?.resultCode == Activity.RESULT_OK) {
+ val data = result.data ?: return
+
+ passwordView.setText(data.getStringExtra("newPassword"))
+ "修改成功,可直接登录".show(this@LoginActivity)
+ }
+ }
+ })
+
override fun initEvent() {
-// forgetPasswordView.setOnClickListener {
-// navigatePageTo()
-// }
+ forgetPasswordView.setOnClickListener {
+ changePwdLauncher.launch(Intent(this, ForgetPasswordActivity::class.java))
+ }
loginButton.setOnClickListener {
val userPhone = userPhoneView.text.toString()
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5b6f9b2..099eb12 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -42,6 +42,7 @@
android:name=".view.BigImageActivity"
android:theme="@style/Theme.BigImageActivity" />
+
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
index a4f3c46..1a844cd 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
@@ -36,6 +36,15 @@
): String
/**
+ * 修改密码
+ */
+ @POST("/sys/mgr/changePwd")
+ suspend fun changePassword(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
+
+ /**
* 获取字典
*/
@GET("/sys/dict/code/{dictCode}")
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
index 8bf4070..afa53cf 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
@@ -15,6 +15,7 @@
import okhttp3.MultipartBody
import okhttp3.RequestBody.Companion.asRequestBody
import okhttp3.RequestBody.Companion.toRequestBody
+import org.json.JSONObject
import java.io.File
@@ -88,6 +89,19 @@
}
/**
+ * 修改密码
+ */
+ suspend fun changePassword(oldPwd: String, newPwd: String): String {
+ val paramObject = JSONObject()
+ paramObject.put("oldPwd", oldPwd)
+ paramObject.put("newPwd", newPwd)
+ val requestBody = paramObject.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.changePassword(AuthenticationHelper.token!!, requestBody)
+ }
+
+ /**
* 获取字典
*/
suspend fun getDictionaryByCode(dictCode: String): String {
diff --git a/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt
new file mode 100644
index 0000000..f68a025
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt
@@ -0,0 +1,99 @@
+package com.casic.xz.meterage.view
+
+import android.content.Intent
+import androidx.lifecycle.ViewModelProvider
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.utils.AuthenticationHelper
+import com.casic.xz.meterage.utils.LoadingDialogHub
+import com.casic.xz.meterage.utils.RSAUtils
+import com.casic.xz.meterage.vm.UserViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_forget_password.*
+import kotlinx.android.synthetic.main.include_base_title.*
+import java.nio.charset.StandardCharsets
+
+class ForgetPasswordActivity : KotlinBaseActivity() {
+
+ private lateinit var userViewModel: UserViewModel
+ private lateinit var newPassword: String
+
+ override fun initData() {
+ userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.changePwdResult.observe(this) {
+ if (it.code == 200) {
+ val intent = Intent()
+ intent.putExtra("newPassword", newPassword)
+ setResult(RESULT_OK, intent)
+ finish()
+ }
+ }
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+
+ 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 < 6 || newPassword.length > 16) {
+ "新密码长度不正确,请重新输入".show(this)
+ return@setOnClickListener
+ }
+ this.newPassword = newPassword
+
+ //数据校验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)
+ }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_forget_password
+
+ override fun observeRequestState() {
+ userViewModel.loadState.observe(this) {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "修改中,请稍后")
+ else -> LoadingDialogHub.dismiss()
+ }
+ }
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ titleView.text = "修改密码"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt
index e8100d2..f26d40e 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt
@@ -1,5 +1,10 @@
package com.casic.xz.meterage.view
+import android.app.Activity
+import android.content.Intent
+import androidx.activity.result.ActivityResult
+import androidx.activity.result.ActivityResultCallback
+import androidx.activity.result.contract.ActivityResultContracts
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
import com.casic.xz.meterage.extensions.initLayoutImmersionBar
@@ -31,10 +36,24 @@
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
}
+ private val changePwdLauncher =
+ registerForActivityResult(
+ ActivityResultContracts.StartActivityForResult(),
+ object : ActivityResultCallback {
+ override fun onActivityResult(result: ActivityResult?) {
+ if (result?.resultCode == Activity.RESULT_OK) {
+ val data = result.data ?: return
+
+ passwordView.setText(data.getStringExtra("newPassword"))
+ "修改成功,可直接登录".show(this@LoginActivity)
+ }
+ }
+ })
+
override fun initEvent() {
-// forgetPasswordView.setOnClickListener {
-// navigatePageTo()
-// }
+ forgetPasswordView.setOnClickListener {
+ changePwdLauncher.launch(Intent(this, ForgetPasswordActivity::class.java))
+ }
loginButton.setOnClickListener {
val userPhone = userPhoneView.text.toString()
diff --git a/app/src/main/java/com/casic/xz/meterage/vm/UserViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/UserViewModel.kt
index a628117..04be988 100644
--- a/app/src/main/java/com/casic/xz/meterage/vm/UserViewModel.kt
+++ b/app/src/main/java/com/casic/xz/meterage/vm/UserViewModel.kt
@@ -25,6 +25,7 @@
val loginResult = MutableLiveData()
val userInfo = MutableLiveData()
val updateResult = MutableLiveData()
+ val changePwdResult = MutableLiveData()
// val outResultModel = MutableLiveData()
fun enter(sid: String, account: String, secretKey: String) = launch({
@@ -90,6 +91,25 @@
it.printStackTrace()
})
+ fun changePassword(oldPwd: String, newPwd: String) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.changePassword(oldPwd, newPwd)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ loadState.value = LoadState.Success
+ changePwdResult.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.get())
+ }
+ }, {
+ loadState.value = LoadState.Fail
+ it.cause.toString().show(BaseApplication.get())
+ it.printStackTrace()
+ })
+
// fun out() = launch({
// val response = RetrofitServiceManager.loginOut()
// val responseCode = response.separateResponseCode()
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5b6f9b2..099eb12 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -42,6 +42,7 @@
android:name=".view.BigImageActivity"
android:theme="@style/Theme.BigImageActivity" />
+
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
index a4f3c46..1a844cd 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
@@ -36,6 +36,15 @@
): String
/**
+ * 修改密码
+ */
+ @POST("/sys/mgr/changePwd")
+ suspend fun changePassword(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
+
+ /**
* 获取字典
*/
@GET("/sys/dict/code/{dictCode}")
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
index 8bf4070..afa53cf 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
@@ -15,6 +15,7 @@
import okhttp3.MultipartBody
import okhttp3.RequestBody.Companion.asRequestBody
import okhttp3.RequestBody.Companion.toRequestBody
+import org.json.JSONObject
import java.io.File
@@ -88,6 +89,19 @@
}
/**
+ * 修改密码
+ */
+ suspend fun changePassword(oldPwd: String, newPwd: String): String {
+ val paramObject = JSONObject()
+ paramObject.put("oldPwd", oldPwd)
+ paramObject.put("newPwd", newPwd)
+ val requestBody = paramObject.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.changePassword(AuthenticationHelper.token!!, requestBody)
+ }
+
+ /**
* 获取字典
*/
suspend fun getDictionaryByCode(dictCode: String): String {
diff --git a/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt
new file mode 100644
index 0000000..f68a025
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt
@@ -0,0 +1,99 @@
+package com.casic.xz.meterage.view
+
+import android.content.Intent
+import androidx.lifecycle.ViewModelProvider
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.utils.AuthenticationHelper
+import com.casic.xz.meterage.utils.LoadingDialogHub
+import com.casic.xz.meterage.utils.RSAUtils
+import com.casic.xz.meterage.vm.UserViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_forget_password.*
+import kotlinx.android.synthetic.main.include_base_title.*
+import java.nio.charset.StandardCharsets
+
+class ForgetPasswordActivity : KotlinBaseActivity() {
+
+ private lateinit var userViewModel: UserViewModel
+ private lateinit var newPassword: String
+
+ override fun initData() {
+ userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.changePwdResult.observe(this) {
+ if (it.code == 200) {
+ val intent = Intent()
+ intent.putExtra("newPassword", newPassword)
+ setResult(RESULT_OK, intent)
+ finish()
+ }
+ }
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+
+ 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 < 6 || newPassword.length > 16) {
+ "新密码长度不正确,请重新输入".show(this)
+ return@setOnClickListener
+ }
+ this.newPassword = newPassword
+
+ //数据校验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)
+ }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_forget_password
+
+ override fun observeRequestState() {
+ userViewModel.loadState.observe(this) {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "修改中,请稍后")
+ else -> LoadingDialogHub.dismiss()
+ }
+ }
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ titleView.text = "修改密码"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt
index e8100d2..f26d40e 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt
@@ -1,5 +1,10 @@
package com.casic.xz.meterage.view
+import android.app.Activity
+import android.content.Intent
+import androidx.activity.result.ActivityResult
+import androidx.activity.result.ActivityResultCallback
+import androidx.activity.result.contract.ActivityResultContracts
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
import com.casic.xz.meterage.extensions.initLayoutImmersionBar
@@ -31,10 +36,24 @@
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
}
+ private val changePwdLauncher =
+ registerForActivityResult(
+ ActivityResultContracts.StartActivityForResult(),
+ object : ActivityResultCallback {
+ override fun onActivityResult(result: ActivityResult?) {
+ if (result?.resultCode == Activity.RESULT_OK) {
+ val data = result.data ?: return
+
+ passwordView.setText(data.getStringExtra("newPassword"))
+ "修改成功,可直接登录".show(this@LoginActivity)
+ }
+ }
+ })
+
override fun initEvent() {
-// forgetPasswordView.setOnClickListener {
-// navigatePageTo()
-// }
+ forgetPasswordView.setOnClickListener {
+ changePwdLauncher.launch(Intent(this, ForgetPasswordActivity::class.java))
+ }
loginButton.setOnClickListener {
val userPhone = userPhoneView.text.toString()
diff --git a/app/src/main/java/com/casic/xz/meterage/vm/UserViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/UserViewModel.kt
index a628117..04be988 100644
--- a/app/src/main/java/com/casic/xz/meterage/vm/UserViewModel.kt
+++ b/app/src/main/java/com/casic/xz/meterage/vm/UserViewModel.kt
@@ -25,6 +25,7 @@
val loginResult = MutableLiveData()
val userInfo = MutableLiveData()
val updateResult = MutableLiveData()
+ val changePwdResult = MutableLiveData()
// val outResultModel = MutableLiveData()
fun enter(sid: String, account: String, secretKey: String) = launch({
@@ -90,6 +91,25 @@
it.printStackTrace()
})
+ fun changePassword(oldPwd: String, newPwd: String) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.changePassword(oldPwd, newPwd)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ loadState.value = LoadState.Success
+ changePwdResult.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.get())
+ }
+ }, {
+ loadState.value = LoadState.Fail
+ it.cause.toString().show(BaseApplication.get())
+ it.printStackTrace()
+ })
+
// fun out() = launch({
// val response = RetrofitServiceManager.loginOut()
// val responseCode = response.separateResponseCode()
diff --git a/app/src/main/res/drawable/bg_edit_text_border_radius_3.xml b/app/src/main/res/drawable/bg_edit_text_border_radius_3.xml
deleted file mode 100644
index 60d5b26..0000000
--- a/app/src/main/res/drawable/bg_edit_text_border_radius_3.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5b6f9b2..099eb12 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -42,6 +42,7 @@
android:name=".view.BigImageActivity"
android:theme="@style/Theme.BigImageActivity" />
+
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
index a4f3c46..1a844cd 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
@@ -36,6 +36,15 @@
): String
/**
+ * 修改密码
+ */
+ @POST("/sys/mgr/changePwd")
+ suspend fun changePassword(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
+
+ /**
* 获取字典
*/
@GET("/sys/dict/code/{dictCode}")
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
index 8bf4070..afa53cf 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
@@ -15,6 +15,7 @@
import okhttp3.MultipartBody
import okhttp3.RequestBody.Companion.asRequestBody
import okhttp3.RequestBody.Companion.toRequestBody
+import org.json.JSONObject
import java.io.File
@@ -88,6 +89,19 @@
}
/**
+ * 修改密码
+ */
+ suspend fun changePassword(oldPwd: String, newPwd: String): String {
+ val paramObject = JSONObject()
+ paramObject.put("oldPwd", oldPwd)
+ paramObject.put("newPwd", newPwd)
+ val requestBody = paramObject.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.changePassword(AuthenticationHelper.token!!, requestBody)
+ }
+
+ /**
* 获取字典
*/
suspend fun getDictionaryByCode(dictCode: String): String {
diff --git a/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt
new file mode 100644
index 0000000..f68a025
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt
@@ -0,0 +1,99 @@
+package com.casic.xz.meterage.view
+
+import android.content.Intent
+import androidx.lifecycle.ViewModelProvider
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.utils.AuthenticationHelper
+import com.casic.xz.meterage.utils.LoadingDialogHub
+import com.casic.xz.meterage.utils.RSAUtils
+import com.casic.xz.meterage.vm.UserViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_forget_password.*
+import kotlinx.android.synthetic.main.include_base_title.*
+import java.nio.charset.StandardCharsets
+
+class ForgetPasswordActivity : KotlinBaseActivity() {
+
+ private lateinit var userViewModel: UserViewModel
+ private lateinit var newPassword: String
+
+ override fun initData() {
+ userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.changePwdResult.observe(this) {
+ if (it.code == 200) {
+ val intent = Intent()
+ intent.putExtra("newPassword", newPassword)
+ setResult(RESULT_OK, intent)
+ finish()
+ }
+ }
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+
+ 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 < 6 || newPassword.length > 16) {
+ "新密码长度不正确,请重新输入".show(this)
+ return@setOnClickListener
+ }
+ this.newPassword = newPassword
+
+ //数据校验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)
+ }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_forget_password
+
+ override fun observeRequestState() {
+ userViewModel.loadState.observe(this) {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "修改中,请稍后")
+ else -> LoadingDialogHub.dismiss()
+ }
+ }
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ titleView.text = "修改密码"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt
index e8100d2..f26d40e 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt
@@ -1,5 +1,10 @@
package com.casic.xz.meterage.view
+import android.app.Activity
+import android.content.Intent
+import androidx.activity.result.ActivityResult
+import androidx.activity.result.ActivityResultCallback
+import androidx.activity.result.contract.ActivityResultContracts
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
import com.casic.xz.meterage.extensions.initLayoutImmersionBar
@@ -31,10 +36,24 @@
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
}
+ private val changePwdLauncher =
+ registerForActivityResult(
+ ActivityResultContracts.StartActivityForResult(),
+ object : ActivityResultCallback {
+ override fun onActivityResult(result: ActivityResult?) {
+ if (result?.resultCode == Activity.RESULT_OK) {
+ val data = result.data ?: return
+
+ passwordView.setText(data.getStringExtra("newPassword"))
+ "修改成功,可直接登录".show(this@LoginActivity)
+ }
+ }
+ })
+
override fun initEvent() {
-// forgetPasswordView.setOnClickListener {
-// navigatePageTo()
-// }
+ forgetPasswordView.setOnClickListener {
+ changePwdLauncher.launch(Intent(this, ForgetPasswordActivity::class.java))
+ }
loginButton.setOnClickListener {
val userPhone = userPhoneView.text.toString()
diff --git a/app/src/main/java/com/casic/xz/meterage/vm/UserViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/UserViewModel.kt
index a628117..04be988 100644
--- a/app/src/main/java/com/casic/xz/meterage/vm/UserViewModel.kt
+++ b/app/src/main/java/com/casic/xz/meterage/vm/UserViewModel.kt
@@ -25,6 +25,7 @@
val loginResult = MutableLiveData()
val userInfo = MutableLiveData()
val updateResult = MutableLiveData()
+ val changePwdResult = MutableLiveData()
// val outResultModel = MutableLiveData()
fun enter(sid: String, account: String, secretKey: String) = launch({
@@ -90,6 +91,25 @@
it.printStackTrace()
})
+ fun changePassword(oldPwd: String, newPwd: String) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.changePassword(oldPwd, newPwd)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ loadState.value = LoadState.Success
+ changePwdResult.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.get())
+ }
+ }, {
+ loadState.value = LoadState.Fail
+ it.cause.toString().show(BaseApplication.get())
+ it.printStackTrace()
+ })
+
// fun out() = launch({
// val response = RetrofitServiceManager.loginOut()
// val responseCode = response.separateResponseCode()
diff --git a/app/src/main/res/drawable/bg_edit_text_border_radius_3.xml b/app/src/main/res/drawable/bg_edit_text_border_radius_3.xml
deleted file mode 100644
index 60d5b26..0000000
--- a/app/src/main/res/drawable/bg_edit_text_border_radius_3.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_edit_text_border_radius_5.xml b/app/src/main/res/drawable/bg_edit_text_border_radius_5.xml
new file mode 100644
index 0000000..428e1a3
--- /dev/null
+++ b/app/src/main/res/drawable/bg_edit_text_border_radius_5.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5b6f9b2..099eb12 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -42,6 +42,7 @@
android:name=".view.BigImageActivity"
android:theme="@style/Theme.BigImageActivity" />
+
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
index a4f3c46..1a844cd 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
@@ -36,6 +36,15 @@
): String
/**
+ * 修改密码
+ */
+ @POST("/sys/mgr/changePwd")
+ suspend fun changePassword(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
+
+ /**
* 获取字典
*/
@GET("/sys/dict/code/{dictCode}")
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
index 8bf4070..afa53cf 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
@@ -15,6 +15,7 @@
import okhttp3.MultipartBody
import okhttp3.RequestBody.Companion.asRequestBody
import okhttp3.RequestBody.Companion.toRequestBody
+import org.json.JSONObject
import java.io.File
@@ -88,6 +89,19 @@
}
/**
+ * 修改密码
+ */
+ suspend fun changePassword(oldPwd: String, newPwd: String): String {
+ val paramObject = JSONObject()
+ paramObject.put("oldPwd", oldPwd)
+ paramObject.put("newPwd", newPwd)
+ val requestBody = paramObject.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.changePassword(AuthenticationHelper.token!!, requestBody)
+ }
+
+ /**
* 获取字典
*/
suspend fun getDictionaryByCode(dictCode: String): String {
diff --git a/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt
new file mode 100644
index 0000000..f68a025
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt
@@ -0,0 +1,99 @@
+package com.casic.xz.meterage.view
+
+import android.content.Intent
+import androidx.lifecycle.ViewModelProvider
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.utils.AuthenticationHelper
+import com.casic.xz.meterage.utils.LoadingDialogHub
+import com.casic.xz.meterage.utils.RSAUtils
+import com.casic.xz.meterage.vm.UserViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_forget_password.*
+import kotlinx.android.synthetic.main.include_base_title.*
+import java.nio.charset.StandardCharsets
+
+class ForgetPasswordActivity : KotlinBaseActivity() {
+
+ private lateinit var userViewModel: UserViewModel
+ private lateinit var newPassword: String
+
+ override fun initData() {
+ userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.changePwdResult.observe(this) {
+ if (it.code == 200) {
+ val intent = Intent()
+ intent.putExtra("newPassword", newPassword)
+ setResult(RESULT_OK, intent)
+ finish()
+ }
+ }
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+
+ 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 < 6 || newPassword.length > 16) {
+ "新密码长度不正确,请重新输入".show(this)
+ return@setOnClickListener
+ }
+ this.newPassword = newPassword
+
+ //数据校验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)
+ }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_forget_password
+
+ override fun observeRequestState() {
+ userViewModel.loadState.observe(this) {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "修改中,请稍后")
+ else -> LoadingDialogHub.dismiss()
+ }
+ }
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ titleView.text = "修改密码"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt
index e8100d2..f26d40e 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt
@@ -1,5 +1,10 @@
package com.casic.xz.meterage.view
+import android.app.Activity
+import android.content.Intent
+import androidx.activity.result.ActivityResult
+import androidx.activity.result.ActivityResultCallback
+import androidx.activity.result.contract.ActivityResultContracts
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
import com.casic.xz.meterage.extensions.initLayoutImmersionBar
@@ -31,10 +36,24 @@
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
}
+ private val changePwdLauncher =
+ registerForActivityResult(
+ ActivityResultContracts.StartActivityForResult(),
+ object : ActivityResultCallback {
+ override fun onActivityResult(result: ActivityResult?) {
+ if (result?.resultCode == Activity.RESULT_OK) {
+ val data = result.data ?: return
+
+ passwordView.setText(data.getStringExtra("newPassword"))
+ "修改成功,可直接登录".show(this@LoginActivity)
+ }
+ }
+ })
+
override fun initEvent() {
-// forgetPasswordView.setOnClickListener {
-// navigatePageTo()
-// }
+ forgetPasswordView.setOnClickListener {
+ changePwdLauncher.launch(Intent(this, ForgetPasswordActivity::class.java))
+ }
loginButton.setOnClickListener {
val userPhone = userPhoneView.text.toString()
diff --git a/app/src/main/java/com/casic/xz/meterage/vm/UserViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/UserViewModel.kt
index a628117..04be988 100644
--- a/app/src/main/java/com/casic/xz/meterage/vm/UserViewModel.kt
+++ b/app/src/main/java/com/casic/xz/meterage/vm/UserViewModel.kt
@@ -25,6 +25,7 @@
val loginResult = MutableLiveData()
val userInfo = MutableLiveData()
val updateResult = MutableLiveData()
+ val changePwdResult = MutableLiveData()
// val outResultModel = MutableLiveData()
fun enter(sid: String, account: String, secretKey: String) = launch({
@@ -90,6 +91,25 @@
it.printStackTrace()
})
+ fun changePassword(oldPwd: String, newPwd: String) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.changePassword(oldPwd, newPwd)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ loadState.value = LoadState.Success
+ changePwdResult.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.get())
+ }
+ }, {
+ loadState.value = LoadState.Fail
+ it.cause.toString().show(BaseApplication.get())
+ it.printStackTrace()
+ })
+
// fun out() = launch({
// val response = RetrofitServiceManager.loginOut()
// val responseCode = response.separateResponseCode()
diff --git a/app/src/main/res/drawable/bg_edit_text_border_radius_3.xml b/app/src/main/res/drawable/bg_edit_text_border_radius_3.xml
deleted file mode 100644
index 60d5b26..0000000
--- a/app/src/main/res/drawable/bg_edit_text_border_radius_3.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_edit_text_border_radius_5.xml b/app/src/main/res/drawable/bg_edit_text_border_radius_5.xml
new file mode 100644
index 0000000..428e1a3
--- /dev/null
+++ b/app/src/main/res/drawable/bg_edit_text_border_radius_5.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/button_main_selector.xml b/app/src/main/res/drawable/button_main_selector.xml
index fe2dd30..ece8881 100644
--- a/app/src/main/res/drawable/button_main_selector.xml
+++ b/app/src/main/res/drawable/button_main_selector.xml
@@ -3,14 +3,14 @@
-
-
+
-
-
+
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5b6f9b2..099eb12 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -42,6 +42,7 @@
android:name=".view.BigImageActivity"
android:theme="@style/Theme.BigImageActivity" />
+
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
index a4f3c46..1a844cd 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
@@ -36,6 +36,15 @@
): String
/**
+ * 修改密码
+ */
+ @POST("/sys/mgr/changePwd")
+ suspend fun changePassword(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
+
+ /**
* 获取字典
*/
@GET("/sys/dict/code/{dictCode}")
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
index 8bf4070..afa53cf 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
@@ -15,6 +15,7 @@
import okhttp3.MultipartBody
import okhttp3.RequestBody.Companion.asRequestBody
import okhttp3.RequestBody.Companion.toRequestBody
+import org.json.JSONObject
import java.io.File
@@ -88,6 +89,19 @@
}
/**
+ * 修改密码
+ */
+ suspend fun changePassword(oldPwd: String, newPwd: String): String {
+ val paramObject = JSONObject()
+ paramObject.put("oldPwd", oldPwd)
+ paramObject.put("newPwd", newPwd)
+ val requestBody = paramObject.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.changePassword(AuthenticationHelper.token!!, requestBody)
+ }
+
+ /**
* 获取字典
*/
suspend fun getDictionaryByCode(dictCode: String): String {
diff --git a/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt
new file mode 100644
index 0000000..f68a025
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt
@@ -0,0 +1,99 @@
+package com.casic.xz.meterage.view
+
+import android.content.Intent
+import androidx.lifecycle.ViewModelProvider
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.utils.AuthenticationHelper
+import com.casic.xz.meterage.utils.LoadingDialogHub
+import com.casic.xz.meterage.utils.RSAUtils
+import com.casic.xz.meterage.vm.UserViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_forget_password.*
+import kotlinx.android.synthetic.main.include_base_title.*
+import java.nio.charset.StandardCharsets
+
+class ForgetPasswordActivity : KotlinBaseActivity() {
+
+ private lateinit var userViewModel: UserViewModel
+ private lateinit var newPassword: String
+
+ override fun initData() {
+ userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.changePwdResult.observe(this) {
+ if (it.code == 200) {
+ val intent = Intent()
+ intent.putExtra("newPassword", newPassword)
+ setResult(RESULT_OK, intent)
+ finish()
+ }
+ }
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+
+ 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 < 6 || newPassword.length > 16) {
+ "新密码长度不正确,请重新输入".show(this)
+ return@setOnClickListener
+ }
+ this.newPassword = newPassword
+
+ //数据校验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)
+ }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_forget_password
+
+ override fun observeRequestState() {
+ userViewModel.loadState.observe(this) {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "修改中,请稍后")
+ else -> LoadingDialogHub.dismiss()
+ }
+ }
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ titleView.text = "修改密码"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt
index e8100d2..f26d40e 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt
@@ -1,5 +1,10 @@
package com.casic.xz.meterage.view
+import android.app.Activity
+import android.content.Intent
+import androidx.activity.result.ActivityResult
+import androidx.activity.result.ActivityResultCallback
+import androidx.activity.result.contract.ActivityResultContracts
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
import com.casic.xz.meterage.extensions.initLayoutImmersionBar
@@ -31,10 +36,24 @@
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
}
+ private val changePwdLauncher =
+ registerForActivityResult(
+ ActivityResultContracts.StartActivityForResult(),
+ object : ActivityResultCallback {
+ override fun onActivityResult(result: ActivityResult?) {
+ if (result?.resultCode == Activity.RESULT_OK) {
+ val data = result.data ?: return
+
+ passwordView.setText(data.getStringExtra("newPassword"))
+ "修改成功,可直接登录".show(this@LoginActivity)
+ }
+ }
+ })
+
override fun initEvent() {
-// forgetPasswordView.setOnClickListener {
-// navigatePageTo()
-// }
+ forgetPasswordView.setOnClickListener {
+ changePwdLauncher.launch(Intent(this, ForgetPasswordActivity::class.java))
+ }
loginButton.setOnClickListener {
val userPhone = userPhoneView.text.toString()
diff --git a/app/src/main/java/com/casic/xz/meterage/vm/UserViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/UserViewModel.kt
index a628117..04be988 100644
--- a/app/src/main/java/com/casic/xz/meterage/vm/UserViewModel.kt
+++ b/app/src/main/java/com/casic/xz/meterage/vm/UserViewModel.kt
@@ -25,6 +25,7 @@
val loginResult = MutableLiveData()
val userInfo = MutableLiveData()
val updateResult = MutableLiveData()
+ val changePwdResult = MutableLiveData()
// val outResultModel = MutableLiveData()
fun enter(sid: String, account: String, secretKey: String) = launch({
@@ -90,6 +91,25 @@
it.printStackTrace()
})
+ fun changePassword(oldPwd: String, newPwd: String) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.changePassword(oldPwd, newPwd)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ loadState.value = LoadState.Success
+ changePwdResult.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.get())
+ }
+ }, {
+ loadState.value = LoadState.Fail
+ it.cause.toString().show(BaseApplication.get())
+ it.printStackTrace()
+ })
+
// fun out() = launch({
// val response = RetrofitServiceManager.loginOut()
// val responseCode = response.separateResponseCode()
diff --git a/app/src/main/res/drawable/bg_edit_text_border_radius_3.xml b/app/src/main/res/drawable/bg_edit_text_border_radius_3.xml
deleted file mode 100644
index 60d5b26..0000000
--- a/app/src/main/res/drawable/bg_edit_text_border_radius_3.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_edit_text_border_radius_5.xml b/app/src/main/res/drawable/bg_edit_text_border_radius_5.xml
new file mode 100644
index 0000000..428e1a3
--- /dev/null
+++ b/app/src/main/res/drawable/bg_edit_text_border_radius_5.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/button_main_selector.xml b/app/src/main/res/drawable/button_main_selector.xml
index fe2dd30..ece8881 100644
--- a/app/src/main/res/drawable/button_main_selector.xml
+++ b/app/src/main/res/drawable/button_main_selector.xml
@@ -3,14 +3,14 @@
-
-
+
-
-
+
diff --git a/app/src/main/res/layout/activity_forget_password.xml b/app/src/main/res/layout/activity_forget_password.xml
new file mode 100644
index 0000000..6d8d42a
--- /dev/null
+++ b/app/src/main/res/layout/activity_forget_password.xml
@@ -0,0 +1,138 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5b6f9b2..099eb12 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -42,6 +42,7 @@
android:name=".view.BigImageActivity"
android:theme="@style/Theme.BigImageActivity" />
+
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
index a4f3c46..1a844cd 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
@@ -36,6 +36,15 @@
): String
/**
+ * 修改密码
+ */
+ @POST("/sys/mgr/changePwd")
+ suspend fun changePassword(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
+
+ /**
* 获取字典
*/
@GET("/sys/dict/code/{dictCode}")
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
index 8bf4070..afa53cf 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
@@ -15,6 +15,7 @@
import okhttp3.MultipartBody
import okhttp3.RequestBody.Companion.asRequestBody
import okhttp3.RequestBody.Companion.toRequestBody
+import org.json.JSONObject
import java.io.File
@@ -88,6 +89,19 @@
}
/**
+ * 修改密码
+ */
+ suspend fun changePassword(oldPwd: String, newPwd: String): String {
+ val paramObject = JSONObject()
+ paramObject.put("oldPwd", oldPwd)
+ paramObject.put("newPwd", newPwd)
+ val requestBody = paramObject.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.changePassword(AuthenticationHelper.token!!, requestBody)
+ }
+
+ /**
* 获取字典
*/
suspend fun getDictionaryByCode(dictCode: String): String {
diff --git a/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt
new file mode 100644
index 0000000..f68a025
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt
@@ -0,0 +1,99 @@
+package com.casic.xz.meterage.view
+
+import android.content.Intent
+import androidx.lifecycle.ViewModelProvider
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.utils.AuthenticationHelper
+import com.casic.xz.meterage.utils.LoadingDialogHub
+import com.casic.xz.meterage.utils.RSAUtils
+import com.casic.xz.meterage.vm.UserViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_forget_password.*
+import kotlinx.android.synthetic.main.include_base_title.*
+import java.nio.charset.StandardCharsets
+
+class ForgetPasswordActivity : KotlinBaseActivity() {
+
+ private lateinit var userViewModel: UserViewModel
+ private lateinit var newPassword: String
+
+ override fun initData() {
+ userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.changePwdResult.observe(this) {
+ if (it.code == 200) {
+ val intent = Intent()
+ intent.putExtra("newPassword", newPassword)
+ setResult(RESULT_OK, intent)
+ finish()
+ }
+ }
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+
+ 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 < 6 || newPassword.length > 16) {
+ "新密码长度不正确,请重新输入".show(this)
+ return@setOnClickListener
+ }
+ this.newPassword = newPassword
+
+ //数据校验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)
+ }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_forget_password
+
+ override fun observeRequestState() {
+ userViewModel.loadState.observe(this) {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "修改中,请稍后")
+ else -> LoadingDialogHub.dismiss()
+ }
+ }
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ titleView.text = "修改密码"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt
index e8100d2..f26d40e 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt
@@ -1,5 +1,10 @@
package com.casic.xz.meterage.view
+import android.app.Activity
+import android.content.Intent
+import androidx.activity.result.ActivityResult
+import androidx.activity.result.ActivityResultCallback
+import androidx.activity.result.contract.ActivityResultContracts
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
import com.casic.xz.meterage.extensions.initLayoutImmersionBar
@@ -31,10 +36,24 @@
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
}
+ private val changePwdLauncher =
+ registerForActivityResult(
+ ActivityResultContracts.StartActivityForResult(),
+ object : ActivityResultCallback {
+ override fun onActivityResult(result: ActivityResult?) {
+ if (result?.resultCode == Activity.RESULT_OK) {
+ val data = result.data ?: return
+
+ passwordView.setText(data.getStringExtra("newPassword"))
+ "修改成功,可直接登录".show(this@LoginActivity)
+ }
+ }
+ })
+
override fun initEvent() {
-// forgetPasswordView.setOnClickListener {
-// navigatePageTo()
-// }
+ forgetPasswordView.setOnClickListener {
+ changePwdLauncher.launch(Intent(this, ForgetPasswordActivity::class.java))
+ }
loginButton.setOnClickListener {
val userPhone = userPhoneView.text.toString()
diff --git a/app/src/main/java/com/casic/xz/meterage/vm/UserViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/UserViewModel.kt
index a628117..04be988 100644
--- a/app/src/main/java/com/casic/xz/meterage/vm/UserViewModel.kt
+++ b/app/src/main/java/com/casic/xz/meterage/vm/UserViewModel.kt
@@ -25,6 +25,7 @@
val loginResult = MutableLiveData()
val userInfo = MutableLiveData()
val updateResult = MutableLiveData()
+ val changePwdResult = MutableLiveData()
// val outResultModel = MutableLiveData()
fun enter(sid: String, account: String, secretKey: String) = launch({
@@ -90,6 +91,25 @@
it.printStackTrace()
})
+ fun changePassword(oldPwd: String, newPwd: String) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.changePassword(oldPwd, newPwd)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ loadState.value = LoadState.Success
+ changePwdResult.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.get())
+ }
+ }, {
+ loadState.value = LoadState.Fail
+ it.cause.toString().show(BaseApplication.get())
+ it.printStackTrace()
+ })
+
// fun out() = launch({
// val response = RetrofitServiceManager.loginOut()
// val responseCode = response.separateResponseCode()
diff --git a/app/src/main/res/drawable/bg_edit_text_border_radius_3.xml b/app/src/main/res/drawable/bg_edit_text_border_radius_3.xml
deleted file mode 100644
index 60d5b26..0000000
--- a/app/src/main/res/drawable/bg_edit_text_border_radius_3.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_edit_text_border_radius_5.xml b/app/src/main/res/drawable/bg_edit_text_border_radius_5.xml
new file mode 100644
index 0000000..428e1a3
--- /dev/null
+++ b/app/src/main/res/drawable/bg_edit_text_border_radius_5.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/button_main_selector.xml b/app/src/main/res/drawable/button_main_selector.xml
index fe2dd30..ece8881 100644
--- a/app/src/main/res/drawable/button_main_selector.xml
+++ b/app/src/main/res/drawable/button_main_selector.xml
@@ -3,14 +3,14 @@
-
-
+
-
-
+
diff --git a/app/src/main/res/layout/activity_forget_password.xml b/app/src/main/res/layout/activity_forget_password.xml
new file mode 100644
index 0000000..6d8d42a
--- /dev/null
+++ b/app/src/main/res/layout/activity_forget_password.xml
@@ -0,0 +1,138 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml
index afe3f8a..9279888 100644
--- a/app/src/main/res/layout/activity_login.xml
+++ b/app/src/main/res/layout/activity_login.xml
@@ -34,7 +34,7 @@
android:layout_centerInParent="true"
android:layout_marginHorizontal="@dimen/dp_60"
android:layout_marginBottom="@dimen/dp_20"
- android:background="@drawable/bg_edit_text_border_radius_3"
+ android:background="@drawable/bg_edit_text_border_radius_5"
android:hint="请输入账号"
android:inputType="text"
android:padding="@dimen/dp_10"
@@ -48,7 +48,7 @@
android:layout_height="@dimen/dp_40"
android:layout_centerInParent="true"
android:layout_marginHorizontal="@dimen/dp_60"
- android:background="@drawable/bg_edit_text_border_radius_3"
+ android:background="@drawable/bg_edit_text_border_radius_5"
android:hint="请输入密码"
android:inputType="textPassword"
android:padding="@dimen/dp_10"
@@ -91,6 +91,6 @@
android:layout_below="@id/passwordView"
android:layout_marginHorizontal="@dimen/dp_60"
android:layout_marginTop="@dimen/dp_50"
- android:text="登录"
+ android:text="登\u3000录"
android:textColor="@color/white" />
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5b6f9b2..099eb12 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -42,6 +42,7 @@
android:name=".view.BigImageActivity"
android:theme="@style/Theme.BigImageActivity" />
+
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
index a4f3c46..1a844cd 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
@@ -36,6 +36,15 @@
): String
/**
+ * 修改密码
+ */
+ @POST("/sys/mgr/changePwd")
+ suspend fun changePassword(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
+
+ /**
* 获取字典
*/
@GET("/sys/dict/code/{dictCode}")
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
index 8bf4070..afa53cf 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
@@ -15,6 +15,7 @@
import okhttp3.MultipartBody
import okhttp3.RequestBody.Companion.asRequestBody
import okhttp3.RequestBody.Companion.toRequestBody
+import org.json.JSONObject
import java.io.File
@@ -88,6 +89,19 @@
}
/**
+ * 修改密码
+ */
+ suspend fun changePassword(oldPwd: String, newPwd: String): String {
+ val paramObject = JSONObject()
+ paramObject.put("oldPwd", oldPwd)
+ paramObject.put("newPwd", newPwd)
+ val requestBody = paramObject.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.changePassword(AuthenticationHelper.token!!, requestBody)
+ }
+
+ /**
* 获取字典
*/
suspend fun getDictionaryByCode(dictCode: String): String {
diff --git a/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt
new file mode 100644
index 0000000..f68a025
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt
@@ -0,0 +1,99 @@
+package com.casic.xz.meterage.view
+
+import android.content.Intent
+import androidx.lifecycle.ViewModelProvider
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.utils.AuthenticationHelper
+import com.casic.xz.meterage.utils.LoadingDialogHub
+import com.casic.xz.meterage.utils.RSAUtils
+import com.casic.xz.meterage.vm.UserViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_forget_password.*
+import kotlinx.android.synthetic.main.include_base_title.*
+import java.nio.charset.StandardCharsets
+
+class ForgetPasswordActivity : KotlinBaseActivity() {
+
+ private lateinit var userViewModel: UserViewModel
+ private lateinit var newPassword: String
+
+ override fun initData() {
+ userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.changePwdResult.observe(this) {
+ if (it.code == 200) {
+ val intent = Intent()
+ intent.putExtra("newPassword", newPassword)
+ setResult(RESULT_OK, intent)
+ finish()
+ }
+ }
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+
+ 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 < 6 || newPassword.length > 16) {
+ "新密码长度不正确,请重新输入".show(this)
+ return@setOnClickListener
+ }
+ this.newPassword = newPassword
+
+ //数据校验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)
+ }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_forget_password
+
+ override fun observeRequestState() {
+ userViewModel.loadState.observe(this) {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "修改中,请稍后")
+ else -> LoadingDialogHub.dismiss()
+ }
+ }
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ titleView.text = "修改密码"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt
index e8100d2..f26d40e 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt
@@ -1,5 +1,10 @@
package com.casic.xz.meterage.view
+import android.app.Activity
+import android.content.Intent
+import androidx.activity.result.ActivityResult
+import androidx.activity.result.ActivityResultCallback
+import androidx.activity.result.contract.ActivityResultContracts
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
import com.casic.xz.meterage.extensions.initLayoutImmersionBar
@@ -31,10 +36,24 @@
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
}
+ private val changePwdLauncher =
+ registerForActivityResult(
+ ActivityResultContracts.StartActivityForResult(),
+ object : ActivityResultCallback {
+ override fun onActivityResult(result: ActivityResult?) {
+ if (result?.resultCode == Activity.RESULT_OK) {
+ val data = result.data ?: return
+
+ passwordView.setText(data.getStringExtra("newPassword"))
+ "修改成功,可直接登录".show(this@LoginActivity)
+ }
+ }
+ })
+
override fun initEvent() {
-// forgetPasswordView.setOnClickListener {
-// navigatePageTo()
-// }
+ forgetPasswordView.setOnClickListener {
+ changePwdLauncher.launch(Intent(this, ForgetPasswordActivity::class.java))
+ }
loginButton.setOnClickListener {
val userPhone = userPhoneView.text.toString()
diff --git a/app/src/main/java/com/casic/xz/meterage/vm/UserViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/UserViewModel.kt
index a628117..04be988 100644
--- a/app/src/main/java/com/casic/xz/meterage/vm/UserViewModel.kt
+++ b/app/src/main/java/com/casic/xz/meterage/vm/UserViewModel.kt
@@ -25,6 +25,7 @@
val loginResult = MutableLiveData()
val userInfo = MutableLiveData()
val updateResult = MutableLiveData()
+ val changePwdResult = MutableLiveData()
// val outResultModel = MutableLiveData()
fun enter(sid: String, account: String, secretKey: String) = launch({
@@ -90,6 +91,25 @@
it.printStackTrace()
})
+ fun changePassword(oldPwd: String, newPwd: String) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.changePassword(oldPwd, newPwd)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ loadState.value = LoadState.Success
+ changePwdResult.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.get())
+ }
+ }, {
+ loadState.value = LoadState.Fail
+ it.cause.toString().show(BaseApplication.get())
+ it.printStackTrace()
+ })
+
// fun out() = launch({
// val response = RetrofitServiceManager.loginOut()
// val responseCode = response.separateResponseCode()
diff --git a/app/src/main/res/drawable/bg_edit_text_border_radius_3.xml b/app/src/main/res/drawable/bg_edit_text_border_radius_3.xml
deleted file mode 100644
index 60d5b26..0000000
--- a/app/src/main/res/drawable/bg_edit_text_border_radius_3.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_edit_text_border_radius_5.xml b/app/src/main/res/drawable/bg_edit_text_border_radius_5.xml
new file mode 100644
index 0000000..428e1a3
--- /dev/null
+++ b/app/src/main/res/drawable/bg_edit_text_border_radius_5.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/button_main_selector.xml b/app/src/main/res/drawable/button_main_selector.xml
index fe2dd30..ece8881 100644
--- a/app/src/main/res/drawable/button_main_selector.xml
+++ b/app/src/main/res/drawable/button_main_selector.xml
@@ -3,14 +3,14 @@
-
-
+
-
-
+
diff --git a/app/src/main/res/layout/activity_forget_password.xml b/app/src/main/res/layout/activity_forget_password.xml
new file mode 100644
index 0000000..6d8d42a
--- /dev/null
+++ b/app/src/main/res/layout/activity_forget_password.xml
@@ -0,0 +1,138 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml
index afe3f8a..9279888 100644
--- a/app/src/main/res/layout/activity_login.xml
+++ b/app/src/main/res/layout/activity_login.xml
@@ -34,7 +34,7 @@
android:layout_centerInParent="true"
android:layout_marginHorizontal="@dimen/dp_60"
android:layout_marginBottom="@dimen/dp_20"
- android:background="@drawable/bg_edit_text_border_radius_3"
+ android:background="@drawable/bg_edit_text_border_radius_5"
android:hint="请输入账号"
android:inputType="text"
android:padding="@dimen/dp_10"
@@ -48,7 +48,7 @@
android:layout_height="@dimen/dp_40"
android:layout_centerInParent="true"
android:layout_marginHorizontal="@dimen/dp_60"
- android:background="@drawable/bg_edit_text_border_radius_3"
+ android:background="@drawable/bg_edit_text_border_radius_5"
android:hint="请输入密码"
android:inputType="textPassword"
android:padding="@dimen/dp_10"
@@ -91,6 +91,6 @@
android:layout_below="@id/passwordView"
android:layout_marginHorizontal="@dimen/dp_60"
android:layout_marginTop="@dimen/dp_50"
- android:text="登录"
+ android:text="登\u3000录"
android:textColor="@color/white" />
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 9f9102e..d85ef32 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -14,6 +14,5 @@
#803d7eff
#FFF5F5F5
#80F5F5F5
- #CCCCCC
- #E4E4E4
+ #D8D8D8
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5b6f9b2..099eb12 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -42,6 +42,7 @@
android:name=".view.BigImageActivity"
android:theme="@style/Theme.BigImageActivity" />
+
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
index a4f3c46..1a844cd 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
@@ -36,6 +36,15 @@
): String
/**
+ * 修改密码
+ */
+ @POST("/sys/mgr/changePwd")
+ suspend fun changePassword(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
+
+ /**
* 获取字典
*/
@GET("/sys/dict/code/{dictCode}")
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
index 8bf4070..afa53cf 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
@@ -15,6 +15,7 @@
import okhttp3.MultipartBody
import okhttp3.RequestBody.Companion.asRequestBody
import okhttp3.RequestBody.Companion.toRequestBody
+import org.json.JSONObject
import java.io.File
@@ -88,6 +89,19 @@
}
/**
+ * 修改密码
+ */
+ suspend fun changePassword(oldPwd: String, newPwd: String): String {
+ val paramObject = JSONObject()
+ paramObject.put("oldPwd", oldPwd)
+ paramObject.put("newPwd", newPwd)
+ val requestBody = paramObject.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.changePassword(AuthenticationHelper.token!!, requestBody)
+ }
+
+ /**
* 获取字典
*/
suspend fun getDictionaryByCode(dictCode: String): String {
diff --git a/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt
new file mode 100644
index 0000000..f68a025
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt
@@ -0,0 +1,99 @@
+package com.casic.xz.meterage.view
+
+import android.content.Intent
+import androidx.lifecycle.ViewModelProvider
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.utils.AuthenticationHelper
+import com.casic.xz.meterage.utils.LoadingDialogHub
+import com.casic.xz.meterage.utils.RSAUtils
+import com.casic.xz.meterage.vm.UserViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_forget_password.*
+import kotlinx.android.synthetic.main.include_base_title.*
+import java.nio.charset.StandardCharsets
+
+class ForgetPasswordActivity : KotlinBaseActivity() {
+
+ private lateinit var userViewModel: UserViewModel
+ private lateinit var newPassword: String
+
+ override fun initData() {
+ userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.changePwdResult.observe(this) {
+ if (it.code == 200) {
+ val intent = Intent()
+ intent.putExtra("newPassword", newPassword)
+ setResult(RESULT_OK, intent)
+ finish()
+ }
+ }
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+
+ 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 < 6 || newPassword.length > 16) {
+ "新密码长度不正确,请重新输入".show(this)
+ return@setOnClickListener
+ }
+ this.newPassword = newPassword
+
+ //数据校验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)
+ }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_forget_password
+
+ override fun observeRequestState() {
+ userViewModel.loadState.observe(this) {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "修改中,请稍后")
+ else -> LoadingDialogHub.dismiss()
+ }
+ }
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ titleView.text = "修改密码"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt
index e8100d2..f26d40e 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt
@@ -1,5 +1,10 @@
package com.casic.xz.meterage.view
+import android.app.Activity
+import android.content.Intent
+import androidx.activity.result.ActivityResult
+import androidx.activity.result.ActivityResultCallback
+import androidx.activity.result.contract.ActivityResultContracts
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
import com.casic.xz.meterage.extensions.initLayoutImmersionBar
@@ -31,10 +36,24 @@
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
}
+ private val changePwdLauncher =
+ registerForActivityResult(
+ ActivityResultContracts.StartActivityForResult(),
+ object : ActivityResultCallback {
+ override fun onActivityResult(result: ActivityResult?) {
+ if (result?.resultCode == Activity.RESULT_OK) {
+ val data = result.data ?: return
+
+ passwordView.setText(data.getStringExtra("newPassword"))
+ "修改成功,可直接登录".show(this@LoginActivity)
+ }
+ }
+ })
+
override fun initEvent() {
-// forgetPasswordView.setOnClickListener {
-// navigatePageTo()
-// }
+ forgetPasswordView.setOnClickListener {
+ changePwdLauncher.launch(Intent(this, ForgetPasswordActivity::class.java))
+ }
loginButton.setOnClickListener {
val userPhone = userPhoneView.text.toString()
diff --git a/app/src/main/java/com/casic/xz/meterage/vm/UserViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/UserViewModel.kt
index a628117..04be988 100644
--- a/app/src/main/java/com/casic/xz/meterage/vm/UserViewModel.kt
+++ b/app/src/main/java/com/casic/xz/meterage/vm/UserViewModel.kt
@@ -25,6 +25,7 @@
val loginResult = MutableLiveData()
val userInfo = MutableLiveData()
val updateResult = MutableLiveData()
+ val changePwdResult = MutableLiveData()
// val outResultModel = MutableLiveData()
fun enter(sid: String, account: String, secretKey: String) = launch({
@@ -90,6 +91,25 @@
it.printStackTrace()
})
+ fun changePassword(oldPwd: String, newPwd: String) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.changePassword(oldPwd, newPwd)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ loadState.value = LoadState.Success
+ changePwdResult.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.get())
+ }
+ }, {
+ loadState.value = LoadState.Fail
+ it.cause.toString().show(BaseApplication.get())
+ it.printStackTrace()
+ })
+
// fun out() = launch({
// val response = RetrofitServiceManager.loginOut()
// val responseCode = response.separateResponseCode()
diff --git a/app/src/main/res/drawable/bg_edit_text_border_radius_3.xml b/app/src/main/res/drawable/bg_edit_text_border_radius_3.xml
deleted file mode 100644
index 60d5b26..0000000
--- a/app/src/main/res/drawable/bg_edit_text_border_radius_3.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_edit_text_border_radius_5.xml b/app/src/main/res/drawable/bg_edit_text_border_radius_5.xml
new file mode 100644
index 0000000..428e1a3
--- /dev/null
+++ b/app/src/main/res/drawable/bg_edit_text_border_radius_5.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/button_main_selector.xml b/app/src/main/res/drawable/button_main_selector.xml
index fe2dd30..ece8881 100644
--- a/app/src/main/res/drawable/button_main_selector.xml
+++ b/app/src/main/res/drawable/button_main_selector.xml
@@ -3,14 +3,14 @@
-
-
+
-
-
+
diff --git a/app/src/main/res/layout/activity_forget_password.xml b/app/src/main/res/layout/activity_forget_password.xml
new file mode 100644
index 0000000..6d8d42a
--- /dev/null
+++ b/app/src/main/res/layout/activity_forget_password.xml
@@ -0,0 +1,138 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml
index afe3f8a..9279888 100644
--- a/app/src/main/res/layout/activity_login.xml
+++ b/app/src/main/res/layout/activity_login.xml
@@ -34,7 +34,7 @@
android:layout_centerInParent="true"
android:layout_marginHorizontal="@dimen/dp_60"
android:layout_marginBottom="@dimen/dp_20"
- android:background="@drawable/bg_edit_text_border_radius_3"
+ android:background="@drawable/bg_edit_text_border_radius_5"
android:hint="请输入账号"
android:inputType="text"
android:padding="@dimen/dp_10"
@@ -48,7 +48,7 @@
android:layout_height="@dimen/dp_40"
android:layout_centerInParent="true"
android:layout_marginHorizontal="@dimen/dp_60"
- android:background="@drawable/bg_edit_text_border_radius_3"
+ android:background="@drawable/bg_edit_text_border_radius_5"
android:hint="请输入密码"
android:inputType="textPassword"
android:padding="@dimen/dp_10"
@@ -91,6 +91,6 @@
android:layout_below="@id/passwordView"
android:layout_marginHorizontal="@dimen/dp_60"
android:layout_marginTop="@dimen/dp_50"
- android:text="登录"
+ android:text="登\u3000录"
android:textColor="@color/white" />
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 9f9102e..d85ef32 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -14,6 +14,5 @@
#803d7eff
#FFF5F5F5
#80F5F5F5
- #CCCCCC
- #E4E4E4
+ #D8D8D8
\ No newline at end of file
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 267f025..8d6ff21 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -97,4 +97,9 @@
- @anim/activity_in
- @anim/activity_out
+
+
\ No newline at end of file