yijianlianUI/app/src/main/java/com/yingmao/clash/act/BandPhoneActivity.kt

192 lines
7.9 KiB
Kotlin
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.yingmao.clash.act
import android.content.Intent
import android.os.Bundle
import android.os.CountDownTimer
import android.view.View
import android.widget.EditText
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.widget.AppCompatImageView
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.observe
import com.yingmao.clash.view.dialog.RxDialogShapeLoading
import com.tencent.mmkv.MMKV
import com.yingmao.clash.R
import com.yingmao.clash.base.BaseActivity
import com.yingmao.clash.base.BaseNotTitleActivity
import com.yingmao.clash.conf.BZYConstants
import com.yingmao.clash.net.http.HttpReqType
import com.yingmao.clash.net.http.HttpStatus
import com.yingmao.clash.net.http.entity.GetSMSCodeRsp
import com.yingmao.clash.util.CommonUtils
import com.yingmao.clash.util.Utils
import com.yingmao.clash.view.RxToast
class BandPhoneActivity : BaseNotTitleActivity() {
private lateinit var rxDialogShapeLoading: RxDialogShapeLoading
private lateinit var tv_sms_code: TextView
private lateinit var tv_account: TextView
private lateinit var tv_title: TextView
private lateinit var et_phone_number: EditText
private lateinit var et_sms_code: EditText
private var phoneNumber: String = ""
var isBandPhone = false
private lateinit var aiBack: AppCompatImageView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
isBandPhone = intent.getBooleanExtra("isPhone", true);
setContentView(R.layout.activity_band_phone)
val viewModel = ViewModelProvider(this).get(BandphoneAtyVM::class.java)
et_phone_number = findViewById(R.id.et_phone_number)
tv_account = findViewById(R.id.tv_account)
tv_title = findViewById(R.id.tv_title)
et_sms_code = findViewById(R.id.et_sms_code)
aiBack=findViewById(R.id.aiBack)
aiBack.setOnClickListener {
finish()
}
tv_sms_code = findViewById(R.id.tv_sms_code)
tv_sms_code.setOnClickListener {
phoneNumber = et_phone_number.text.trim().toString()
if (isBandPhone) {
if (phoneNumber.startsWith("1") && phoneNumber.length == 11) {
viewModel.getSMSCode(phoneNumber)
} else {
RxToast.warning(resources.getString(R.string.correctPhoneNumber))
}
} else {
if (Utils.isEmail(phoneNumber)) {
viewModel.getSMSCode(phoneNumber)
} else {
RxToast.warning(resources.getString(R.string.correctPhoneEmail))
}
}
}
findViewById<View>(R.id.btn_band).setOnClickListener {
phoneNumber = et_phone_number.text.trim().toString()
if (isBandPhone) {
if (!Utils.isPhoneNumber(phoneNumber)) {
RxToast.warning(resources.getString(R.string.correctPhoneNumber))
return@setOnClickListener
}
} else {
if (!Utils.isEmail(phoneNumber)) {
RxToast.warning(resources.getString(R.string.correctPhoneEmail))
return@setOnClickListener
}
}
val smsCode = et_sms_code.text.trim().toString()
if (smsCode.length < 4) {
RxToast.warning(resources.getString(R.string.correctCode))
return@setOnClickListener
}
val userName = MMKV.defaultMMKV().decodeString(BZYConstants.MMKV_KEY_REMEMBER_USERNAME,"")!!
val phToken = MMKV.defaultMMKV().decodeString(BZYConstants.MMKV_KEY_PH_TOKEN,"")!!
val params = mutableMapOf(
"phoneNumber" to phoneNumber,
"vpnAccount" to userName,
"SMSCode" to smsCode,
"phToken" to phToken,
)
viewModel.bandPhone(params)
}
if (!isBandPhone){
tv_title.text =resources.getString(R.string.bindingEmail)
tv_account.text = resources.getString(R.string.email)
}
initVM(viewModel)
}
private fun initVM(viewModel: BandphoneAtyVM) {
viewModel.statusData.observe(this) {
when (it) {
is HttpStatus.Loading -> {
if (it.reqType == HttpReqType.GETSMSCODE) {
apply {
rxDialogShapeLoading = RxDialogShapeLoading(this)
rxDialogShapeLoading.setMessage(resources.getString(R.string.ObtainingVerificationCode))
rxDialogShapeLoading.show()
}
} else {
apply {
rxDialogShapeLoading = RxDialogShapeLoading(this)
rxDialogShapeLoading.setMessage(resources.getString(R.string.nowBinding))
rxDialogShapeLoading.show()
}
}
}
is HttpStatus.Success -> {
rxDialogShapeLoading.cancel()
if (it.reqType == HttpReqType.GETSMSCODE) {
(it.rsp as GetSMSCodeRsp).let { rsp ->
if (rsp.code == 1000) {
RxToast.success(resources.getString(R.string.VerificationCodeSent))
countDown()
} else {
RxToast.warning(resources.getString(R.string.VerificationCodeSentFail)+ rsp.message)
}
}
} else {
(it.rsp as GetSMSCodeRsp).let { rsp ->
if (rsp.code == 1000) {
RxToast.success(resources.getString(R.string.BingIngSuccess), Toast.LENGTH_LONG)
MMKV.defaultMMKV().encode(BZYConstants.MMKV_KEY_REMEMBER_USERNAME, phoneNumber)
MMKV.defaultMMKV().removeValueForKey(BZYConstants.MMKV_KEY_PH_TOKEN)
MMKV.defaultMMKV().removeValueForKey(BZYConstants.MMKV_KEY_TOKEN)
MMKV.defaultMMKV().removeValueForKey(BZYConstants.MMKV_KEY_CURRENT_NODE)
var intent=Intent(CommonUtils.getApp(), LoginActivity::class.java)
intent.putExtra(BZYConstants.EXTRA_Bind_Account,phoneNumber)
startActivity(intent)
finish()
} else {
RxToast.warning(resources.getString(R.string.BingIngFail) + rsp.message)
}
}
}
}
is HttpStatus.Failure -> {
rxDialogShapeLoading.cancel()
if (it.reqType == HttpReqType.GETSMSCODE) {
RxToast.warning(resources.getString(R.string.GetSmsFail)+"${it.msg}")
} else {
RxToast.warning(resources.getString(R.string.BingIngFail)+"${it.msg}")
}
}
}
}
}
var countDownTimer: CountDownTimer? = null
fun countDown() {
tv_sms_code.isEnabled = false
countDownTimer = object : CountDownTimer(60000, 1000) {
//1000ms运行一次onTick里面的方法
override fun onFinish() {
tv_sms_code.isEnabled = true
tv_sms_code.text = resources.getString(R.string.ObtainVerificationCode)
}
override fun onTick(millisUntilFinished: Long) {
tv_sms_code.text = "${millisUntilFinished / 1000} S"
}
}.start()
}
override fun onDestroy() {
super.onDestroy()
countDownTimer?.cancel()
}
}