192 lines
7.9 KiB
Kotlin
192 lines
7.9 KiB
Kotlin
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()
|
||
}
|
||
} |