package com.dollearn.student.ui.login
|
|
import android.Manifest
|
import android.app.Activity
|
import android.content.Intent
|
import android.os.CountDownTimer
|
import android.text.method.HideReturnsTransformationMethod
|
import android.text.method.PasswordTransformationMethod
|
import androidx.core.os.bundleOf
|
import cn.sinata.xldutils.gone
|
import cn.sinata.xldutils.utils.*
|
import cn.sinata.xldutils.visible
|
import com.amap.api.location.AMapLocationListener
|
import com.dollearn.student.R
|
import com.dollearn.student.DollearnApplication
|
import com.dollearn.student.dialog.TipDialog
|
import com.dollearn.student.network.HttpManager
|
import com.dollearn.student.network.request
|
import com.dollearn.student.ui.TransparentStatusBarActivity
|
import com.dollearn.student.utils.AMapKit
|
import com.tbruyelle.rxpermissions2.RxPermissions
|
import kotlinx.android.synthetic.main.activity_register.*
|
import org.jetbrains.anko.sdk27.coroutines.onClick
|
|
class RegisterActivity : TransparentStatusBarActivity() {
|
override fun setContentView() = R.layout.activity_register
|
|
private lateinit var timer:CountDownTimer
|
private val type by lazy { intent.getIntExtra("type", TYPE_REGISTER) }
|
|
private val openid by lazy { intent.getStringExtra("openid")?:"" } //微信绑手机号的参数
|
|
private val phone by lazy { intent.getStringExtra("phone") } //初次登录 强制修改密码
|
|
override fun initClick() {
|
tv_action.onClick {
|
val phone = et_phone.text.toString()
|
if (!phone.isValidPhone()){
|
myToast("请输入正确的手机号")
|
return@onClick
|
}
|
val code = et_code.text.toString()
|
if (code.length!=6){
|
myToast("请输入6位验证码")
|
return@onClick
|
}
|
val pwd = et_pwd.text.toString()
|
if (type!= TYPE_BIND&&pwd.length<6){
|
myToast("密码至少6位")
|
return@onClick
|
}
|
val invitePhone = et_reject_phone.text.toString()
|
if (invitePhone.isNotEmpty()){ //有邀请人的逻辑
|
if (!invitePhone.isValidPhone()){
|
myToast("邀请人手机号有误")
|
return@onClick
|
}
|
val rxPermissions = RxPermissions(this@RegisterActivity)
|
if (rxPermissions.isGranted(Manifest.permission.ACCESS_FINE_LOCATION)){
|
getLocation(phone, pwd, code, invitePhone)
|
}else{
|
val tipDialog = TipDialog()
|
tipDialog.arguments = bundleOf("msg" to "我们将会为您赠送所在地区的优惠活动,需要获取您的位置信息,是否确认授权?","ok" to "授权并领取","cancel" to "不需要")
|
tipDialog.setCallback(object :TipDialog.OnClickCallback{
|
override fun onOk() {
|
val subscribe =
|
rxPermissions.request(Manifest.permission.ACCESS_FINE_LOCATION)
|
.subscribe {
|
if (!it){
|
next(phone, pwd, code, invitePhone)
|
}else{
|
getLocation(phone, pwd, code, invitePhone)
|
}
|
}
|
compositeDisposable.add(subscribe)
|
}
|
|
override fun onCancel() {
|
next(phone, pwd, code, invitePhone)
|
}
|
})
|
tipDialog.showAllowingStateLoss(supportFragmentManager,"register")
|
}
|
}else //没有邀请人,直接进入下一步
|
next(phone, pwd, code, invitePhone)
|
}
|
|
cb_pwd_visible.setOnCheckedChangeListener { _, isChecked ->
|
if (isChecked)
|
et_pwd.transformationMethod = HideReturnsTransformationMethod.getInstance()
|
else
|
et_pwd.transformationMethod = PasswordTransformationMethod.getInstance()
|
et_pwd.setSelection(et_pwd.text.length)
|
}
|
|
tv_code.onClick {
|
val phone = et_phone.text.toString()
|
if (!phone.isValidPhone())
|
myToast("请输入正确的手机号")
|
else{
|
tv_code.isEnabled = false
|
HttpManager.getCode(phone).request(this@RegisterActivity,success = {_,_->
|
timer.start()
|
}){_,_->
|
tv_code.isEnabled = true
|
}
|
}
|
}
|
}
|
|
/**
|
* 有权限的情况获取定位
|
*/
|
private fun getLocation(phone:String,pwd:String,code:String,invitePhone:String){
|
if (DollearnApplication.lat!=null)
|
next(phone, pwd, code, invitePhone)
|
else{
|
showDialog("正在获取定位...")
|
AMapKit.initLocation(this, AMapLocationListener {
|
DollearnApplication.lat = it.latitude
|
DollearnApplication.lon = it.longitude
|
DollearnApplication.province = it.province
|
DollearnApplication.provinceCode = "${it.adCode.substring(0, 3)}000"
|
DollearnApplication.cityName = it.city
|
DollearnApplication.cityCode = "${it.adCode.substring(0, 4)}00"
|
dismissDialog()
|
next(phone, pwd, code, invitePhone)
|
})
|
}
|
}
|
|
private fun next(phone:String,pwd:String,code:String,invitePhone:String){
|
tv_action.isEnabled = false
|
if (type == TYPE_BIND){
|
HttpManager.bindPhone(phone, code,if (invitePhone.isNullOrEmpty()) null else invitePhone,openid , DollearnApplication.lat,DollearnApplication.lon)
|
.request(this@RegisterActivity,success = {_,data->
|
val intent = Intent()
|
intent.putExtra("token",data?.optString("token"))
|
setResult(Activity.RESULT_OK,intent)
|
myToast("绑定成功")
|
finish()
|
}){_,_->
|
tv_action.isEnabled = true
|
}
|
}else{
|
HttpManager.register(type,phone, pwd.md5(), code,if (invitePhone.isNullOrEmpty()) null else invitePhone,if (type == TYPE_BIND) openid else null,
|
DollearnApplication.lat,DollearnApplication.lon)
|
.request(this@RegisterActivity,success = {_,_->
|
myToast(if (type == TYPE_REGISTER)"注册成功" else "密码修改成功")
|
finish()
|
}){_,_->
|
tv_action.isEnabled = true
|
}
|
}
|
|
}
|
|
override fun initView() {
|
useWhiteTitle()
|
et_phone.setText(phone)
|
title = when(type){
|
TYPE_FORGET->"忘记密码"
|
TYPE_MODIFY_PWD->"修改密码"
|
TYPE_BIND->{
|
et_pwd.gone()
|
cb_pwd_visible.gone()
|
et_reject_phone.visible()
|
tv_action.text = "确认绑定"
|
"绑定手机"
|
}
|
else ->{
|
et_reject_phone.visible()
|
"注册"
|
}
|
}
|
timer = object :CountDownTimer(60000,1000){
|
override fun onFinish() {
|
tv_code.isEnabled = true
|
tv_code.text = "获取验证码"
|
}
|
|
override fun onTick(millisUntilFinished: Long) {
|
tv_code.text = "${millisUntilFinished/1000}s"
|
}
|
}
|
}
|
|
|
override fun onDestroy() {
|
super.onDestroy()
|
timer.cancel()
|
}
|
|
companion object{
|
const val TYPE_REGISTER = 2
|
const val TYPE_MODIFY_PWD = 3
|
const val TYPE_FORGET = 4
|
const val TYPE_BIND = 5 //微信首次登录绑定手机号
|
}
|
}
|