|
@@ -4,8 +4,18 @@ import android.view.View
|
|
|
import androidx.databinding.Bindable
|
|
|
import androidx.lifecycle.MutableLiveData
|
|
|
import com.quansu.heifengwuliu.BR
|
|
|
+import com.quansu.heifengwuliu.R
|
|
|
+import com.quansu.heifengwuliu.config.ConfigMMKV
|
|
|
+import com.quansu.heifengwuliu.model.SendSmsBean
|
|
|
import com.quansu.heifengwuliu.repository.LoginRepository
|
|
|
+import com.quansu.heifengwuliu.utils.net.NetEngine
|
|
|
import com.ysnows.base.base.BViewModel
|
|
|
+import com.ysnows.base.utils.MMKVManager
|
|
|
+import io.reactivex.Observable
|
|
|
+import io.reactivex.android.schedulers.AndroidSchedulers
|
|
|
+import io.reactivex.disposables.Disposable
|
|
|
+import io.reactivex.schedulers.Schedulers
|
|
|
+import java.util.concurrent.TimeUnit
|
|
|
|
|
|
open class LoginVModel : BViewModel<LoginRepository>() {
|
|
|
|
|
@@ -13,6 +23,10 @@ open class LoginVModel : BViewModel<LoginRepository>() {
|
|
|
var passwordVisiblity = MutableLiveData<Int>()
|
|
|
var codeVisibility = MutableLiveData<Int>()
|
|
|
var switchType= MutableLiveData<String>()
|
|
|
+
|
|
|
+ var codeTip: MutableLiveData<String> = MutableLiveData(getCodeStr)
|
|
|
+ private var disposable: Disposable? = null
|
|
|
+
|
|
|
private var showType=true
|
|
|
|
|
|
init {
|
|
@@ -21,13 +35,68 @@ open class LoginVModel : BViewModel<LoginRepository>() {
|
|
|
switchType.value="使用密码登录"
|
|
|
}
|
|
|
|
|
|
+ companion object {
|
|
|
+ const val time = 60
|
|
|
+ var timeStart: Long = 1
|
|
|
+ const val getCodeStr = "获取验证码"
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ fun getSmsCode(start: Long = 1) {
|
|
|
+ if (codeTip.value != getCodeStr) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if (phone.isNullOrEmpty()) {
|
|
|
+ toast(R.string.please_input_user_phone)
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ repository().lreq(NetEngine.service.getRegisterCode(phone))
|
|
|
+ .doOnNext() { res ->
|
|
|
+ if (res.ok(true)) {
|
|
|
+ var bean: SendSmsBean = res.data() as SendSmsBean
|
|
|
+
|
|
|
+ code=bean.code
|
|
|
+ startTimer(start)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .subscribe()
|
|
|
+ }
|
|
|
+
|
|
|
+ private fun startTimer(start: Long = 1) {
|
|
|
+ disposeTimer()
|
|
|
+ disposable = Observable.intervalRange(start, time - start + 1, 0, 1, TimeUnit.SECONDS)
|
|
|
+ .subscribeOn(Schedulers.io())
|
|
|
+ .observeOn(AndroidSchedulers.mainThread())
|
|
|
+ .doOnNext {
|
|
|
+ timeStart = it
|
|
|
+ codeTip.value = if (time - it > 0) "${time - it}秒后重发" else {
|
|
|
+ getCodeStr
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .doOnComplete() {
|
|
|
+ MMKVManager.instance().encode(ConfigMMKV.REGISTER_TIME_START, 60)
|
|
|
+ }
|
|
|
+ .doOnDispose() {
|
|
|
+ MMKVManager.instance().encode(ConfigMMKV.REGISTER_TIME_START, 60)
|
|
|
+ }
|
|
|
+ .subscribe()
|
|
|
+ }
|
|
|
|
|
|
|
|
|
+ private fun disposeTimer() {
|
|
|
+ disposable?.isDisposed ?: disposable?.dispose()
|
|
|
+ }
|
|
|
@Bindable
|
|
|
- open var userName: String? = null
|
|
|
+ open var phone: String? = null
|
|
|
set(value) {
|
|
|
field = value
|
|
|
- notifyPropertyChanged(BR.userName)
|
|
|
+ notifyPropertyChanged(BR.phone)
|
|
|
}
|
|
|
|
|
|
|
|
@@ -51,10 +120,10 @@ open class LoginVModel : BViewModel<LoginRepository>() {
|
|
|
//todo:
|
|
|
if(showType){//验证码登录
|
|
|
|
|
|
- repository().login(userName, code)
|
|
|
+ repository().loginCode(phone, code)
|
|
|
|
|
|
}else{//密码登录
|
|
|
- repository().login(userName, passWord)
|
|
|
+ repository().login(phone, passWord)
|
|
|
|
|
|
}
|
|
|
|