package com.igo.user.ui.login
|
|
//import com.umeng.socialize.UMAuthListener
|
//import com.umeng.socialize.UMShareAPI
|
//import com.umeng.socialize.UMShareConfig
|
//import com.umeng.socialize.bean.SHARE_MEDIA
|
import MainActivityViewModel
|
import android.app.Activity
|
import android.content.Intent
|
import android.os.CountDownTimer
|
import android.util.Log
|
import android.view.View
|
import android.widget.CheckBox
|
import android.widget.CheckedTextView
|
import android.widget.EditText
|
import android.widget.ImageView
|
import android.widget.TextView
|
import androidx.activity.viewModels
|
import androidx.core.os.bundleOf
|
import androidx.lifecycle.lifecycleScope
|
import cn.sinata.xldutils.gone
|
import cn.sinata.xldutils.utils.SPUtils
|
import cn.sinata.xldutils.utils.isValidPhone
|
import cn.sinata.xldutils.utils.myToast
|
import cn.sinata.xldutils.utils.optInt
|
import cn.sinata.xldutils.utils.optString
|
import cn.sinata.xldutils.utils.showAllowingStateLoss
|
import cn.sinata.xldutils.visible
|
import com.facebook.AccessToken
|
import com.facebook.CallbackManager
|
import com.facebook.FacebookCallback
|
import com.facebook.FacebookException
|
import com.facebook.Profile
|
import com.facebook.ProfileTracker
|
import com.facebook.login.LoginManager
|
import com.facebook.login.LoginResult
|
import com.facebook.login.widget.LoginButton
|
import com.flyco.tablayout.CommonTabLayout
|
import com.flyco.tablayout.listener.CustomTabEntity
|
import com.flyco.tablayout.listener.OnTabSelectListener
|
import com.google.android.gms.common.ConnectionResult
|
import com.google.android.gms.common.GoogleApiAvailability
|
import com.google.android.gms.recaptcha.RecaptchaClient
|
import com.google.recaptcha.sample.RecaptchaVisualException
|
import com.igo.user.R
|
import com.igo.user.dialog.SingleWheelDialog
|
import com.igo.user.interfaces.StringCallback
|
import com.igo.user.network.HttpManager
|
import com.igo.user.network.request
|
import com.igo.user.ui.H5Activity
|
import com.igo.user.ui.HomeActivity
|
import com.igo.user.ui.TransparentStatusBarActivity
|
import com.igo.user.utils.Const
|
import com.twitter.sdk.android.core.Callback
|
import com.twitter.sdk.android.core.Result
|
import com.twitter.sdk.android.core.TwitterApiClient
|
import com.twitter.sdk.android.core.TwitterAuthConfig
|
import com.twitter.sdk.android.core.TwitterCore
|
import com.twitter.sdk.android.core.TwitterException
|
import com.twitter.sdk.android.core.TwitterSession
|
import com.twitter.sdk.android.core.identity.TwitterAuthClient
|
import com.twitter.sdk.android.core.models.User
|
import kotlinx.coroutines.launch
|
import org.jetbrains.anko.find
|
import org.jetbrains.anko.startActivity
|
import org.jetbrains.anko.startActivityForResult
|
|
class LoginActivity : TransparentStatusBarActivity()/*, UMAuthListener*/ {
|
override fun setContentView() = R.layout.activity_login
|
|
companion object {
|
const val WEB_SITE_KEY = "6LdZdPErAAAAAM5YvB_2ElX5VR4bG2hcNhAOO5cU"
|
|
// const val BASE_URL = "https://www.google.com/recaptcha/api.js?onload=onLoad&render=explicit"
|
const val BASE_URL = "https://gopost.ci"
|
}
|
|
|
private val viewModel: MainActivityViewModel by viewModels()
|
|
// private lateinit var recaptcha: RecaptchaVisual
|
|
private val areaCode by lazy { find<TextView>(R.id.areaCode) }
|
private val tv_code by lazy { find<TextView>(R.id.tv_code) }
|
private val tv_op_title by lazy { find<TextView>(R.id.tv_op_title) }
|
private val tv_forget by lazy { find<TextView>(R.id.tv_forget) }
|
private val tv_pwd by lazy { find<CheckedTextView>(R.id.tv_pwd) }
|
private val tv_operator by lazy { find<TextView>(R.id.tv_operator) }
|
private val tab_type by lazy { find<CommonTabLayout>(R.id.tab_type) }
|
private val et_code by lazy { find<EditText>(R.id.et_code) }
|
private val et_phone by lazy { find<EditText>(R.id.et_phone) }
|
private val line by lazy { find<View>(R.id.line) }
|
private val et_pwd by lazy { find<EditText>(R.id.et_pwd) }
|
private val tv_action by lazy { find<TextView>(R.id.tv_action) }
|
private val cb_rule by lazy { find<CheckBox>(R.id.cb_rule) }
|
private val tv_wx by lazy { find<ImageView>(R.id.tv_wx) }
|
private val tv_fb by lazy { find<View>(R.id.tv_fb) }
|
private val tv_x by lazy { find<View>(R.id.tv_x) }
|
private val tv_rule by lazy { find<TextView>(R.id.tv_rule) }
|
private val login_button by lazy { find<LoginButton>(R.id.login_button) }
|
|
private val timer by lazy {
|
object : CountDownTimer(60000, 1000) {
|
override fun onFinish() {
|
tv_code.text = getString(R.string.获取验证码)
|
tv_code.isEnabled = true
|
}
|
|
override fun onTick(millisUntilFinished: Long) {
|
tv_code.text = getString(R.string.sms_code_countdown, millisUntilFinished / 1000)
|
}
|
}
|
}
|
|
private var mTwitterAuthClient: TwitterAuthClient? = null //推特登录
|
|
|
private var ip: String? = null //登录id
|
private var callbackManager: CallbackManager? = null//脸书登录回调
|
private lateinit var profileTracker: ProfileTracker
|
|
// private val profileTracker by lazy {
|
// object :ProfileTracker(){
|
// override fun onCurrentProfileChanged(
|
// oldProfile: Profile?,
|
// currentProfile: Profile?
|
// ) {
|
// currentProfile?.name
|
// }
|
// }
|
// }
|
private var recaptchaClient: RecaptchaClient? = null
|
private val SITE_KEY = "6Lfj0-srAAAAAIzzOyWpAOy09YEtCxwrqOKbIe2d" // 替换为实际密钥
|
|
override fun initClick() {
|
|
val googleApiAvailability = GoogleApiAvailability.getInstance()
|
val resultCode = googleApiAvailability.isGooglePlayServicesAvailable(this)
|
if (resultCode != ConnectionResult.SUCCESS) {
|
// 提示用户更新 Play 服务
|
println("谷歌服务不可用")
|
}
|
|
areaCode.setOnClickListener {
|
startActivityForResult<AreaCodeActivity>(10086)
|
}
|
tv_operator.setOnClickListener {
|
val singleWheelDialog = SingleWheelDialog()
|
singleWheelDialog.arguments = bundleOf(
|
"title" to getString(R.string.运营商), "data" to arrayListOf(
|
"MTN",
|
"TIGO",
|
"TELECEL",
|
"AIRTEL"
|
)
|
)
|
singleWheelDialog.setCallback(object : StringCallback {
|
override fun onRlt(rlt: String) {
|
tv_operator.text = rlt
|
}
|
})
|
singleWheelDialog.showAllowingStateLoss(supportFragmentManager, "op")
|
}
|
|
tab_type.setOnTabSelectListener(object : OnTabSelectListener {
|
override fun onTabSelect(position: Int) {
|
if (position == 0) {
|
tv_pwd.isChecked = false
|
tv_pwd.text = getString(R.string.密码)
|
et_pwd.visible()
|
et_code.gone()
|
tv_code.gone()
|
tv_operator.gone()
|
tv_op_title.gone()
|
line.gone()
|
tv_forget.visible()
|
} else {
|
tv_pwd.isChecked = true
|
tv_pwd.text = getString(R.string.验证码)
|
et_code.visible()
|
tv_code.visible()
|
tv_operator.gone()
|
tv_op_title.gone()
|
line.visible()
|
et_pwd.gone()
|
tv_forget.gone()
|
}
|
}
|
|
override fun onTabReselect(position: Int) {
|
}
|
})
|
tv_code.setOnClickListener {
|
|
var phone = et_phone.text.toString()
|
if (!phone.isValidPhone()) {
|
myToast(getString(R.string.请填写手机号))
|
return@setOnClickListener
|
}
|
phone = areaCode.text.toString().replace("+", "") + phone
|
lifecycleScope.launch {
|
try {
|
val token = ""
|
viewModel.onLoginButtonClicked(token)
|
|
HttpManager.sendSms(phone, "", 2, token).request(
|
this@LoginActivity,
|
success = { _, _ ->
|
val start = timer.start()
|
myToast(getString(R.string.发送成功))
|
},
|
error = { _, _ ->
|
tv_code.isEnabled = true
|
})
|
} catch (error: RecaptchaVisualException) {
|
viewModel.onTokenError(error)
|
}
|
}
|
|
|
/* val imageCodeDialog = ImageCodeDialog()
|
imageCodeDialog.arguments = bundleOf("phone" to phone)
|
|
imageCodeDialog.setCallback(object : ImageCodeDialog.Callback {
|
override fun onOk(code: String) {
|
tv_code.isEnabled = false
|
HttpManager.sendSms(phone, code, 2).request(
|
this@LoginActivity,
|
success = { _, _ ->
|
val start = timer.start()
|
myToast(getString(R.string.发送成功))
|
},
|
error = { _, _ ->
|
tv_code.isEnabled = true
|
})
|
}
|
})
|
imageCodeDialog.show(supportFragmentManager, "code")*/
|
}
|
|
tv_forget.setOnClickListener {
|
startActivity<ForgetActivity>()
|
}
|
|
tv_action.setOnClickListener {
|
if (!cb_rule.isChecked)
|
myToast(getString(R.string.please_agree))
|
else {
|
/* if (tab_type.currentTab == 0){
|
val operator = tv_operator.text.toString()
|
if (operator.isEmpty()){
|
myToast(getString(R.string.请选择运营商))
|
return@setOnClickListener
|
}
|
}*/
|
var phone = et_phone.text.toString()
|
if (!phone.isValidPhone()) {
|
myToast(getString(R.string.请填写手机号))
|
return@setOnClickListener
|
}
|
phone = areaCode.text.toString().replace("+", "") + phone
|
|
if (tab_type.currentTab == 0) {
|
passwordLogin(phone)
|
} else {
|
codeLogin(phone)
|
}
|
}
|
}
|
|
// val config = UMShareConfig()
|
// config.isNeedAuthOnGetUserInfo(true)
|
// UMShareAPI.get(this).setShareConfig(config)
|
tv_wx.setOnClickListener {
|
if (!cb_rule.isChecked)
|
myToast(getString(R.string.please_agree))
|
else {
|
|
// UMShareAPI.get(this).getPlatformInfo(this, SHARE_MEDIA.WEIXIN, this)
|
}
|
}
|
|
tv_fb.setOnClickListener {
|
if (!cb_rule.isChecked)
|
myToast(getString(R.string.please_agree))
|
else {
|
if (callbackManager == null) {
|
callbackManager = CallbackManager.Factory.create()
|
login_button.registerCallback(callbackManager, object :
|
FacebookCallback<LoginResult> {
|
override fun onCancel() {
|
Log.e(Const.Tag, "facebook cancel")
|
}
|
|
override fun onError(error: FacebookException) {
|
Log.e(Const.Tag, "facebook error:${error.message}")
|
myToast(getString(R.string.login_error))
|
}
|
|
override fun onSuccess(result: LoginResult) {
|
Log.e(Const.Tag, "facebook token:${result.accessToken.userId}")
|
showDialog()
|
HttpManager.facebookLogin(result.accessToken.userId, null, null)
|
.request(
|
this@LoginActivity
|
) { _, data ->
|
data?.let {
|
SPUtils.instance()
|
.put(Const.User.APP_ID, it.optString("appid"))
|
.put(Const.User.TOKEN, it.optString("token"))
|
.put(Const.User.EMAIL, it.optString("email"))
|
.put(Const.User.USER_ID, it.optInt("id")).apply()
|
/* if (it.optString("email").isEmpty()) {
|
startActivity<FinishMailActivity>("isRegister" to true)
|
}*/
|
if (it.optInt("phone") != 2) { //没有手机号
|
startActivityForResult<BindPhoneActivity>(1)
|
SPUtils.instance().put(Const.User.NO_PHONE, true)
|
.apply()
|
}
|
finish()
|
}
|
}
|
}
|
})
|
}
|
if (!this::profileTracker.isInitialized) {
|
profileTracker = object : ProfileTracker() {
|
override fun onCurrentProfileChanged(
|
oldProfile: Profile?,
|
currentProfile: Profile?
|
) {
|
currentProfile?.name
|
}
|
}
|
}
|
profileTracker.startTracking()
|
val accessToken = AccessToken.getCurrentAccessToken()
|
if (accessToken != null && !accessToken.isExpired)
|
LoginManager.getInstance().logOut()
|
login_button.callOnClick()
|
}
|
}
|
|
// twitterLoginButton.callback = object : Callback<TwitterSession>() {
|
// override fun success(result: Result<TwitterSession>?) {
|
// val user_id = result!!.data.userId.toString()
|
// Log.e("X Login","login success:"+user_id)
|
// val user_name = result.data.userName
|
// var email:String?
|
// val activeSession = TwitterCore.getInstance().sessionManager.activeSession
|
// val client = TwitterApiClient(activeSession)
|
// val accountService = client.accountService
|
// val show = accountService.verifyCredentials(false, false, false)
|
// show.enqueue(object : Callback<User?>() {
|
// override fun success(result: Result<User?>?) {
|
// email = result?.data?.email
|
// twitterLogin(user_id,user_name,email)
|
// }
|
//
|
// override fun failure(exception: TwitterException?) {
|
// twitterLogin(user_id,user_name,null)
|
// }
|
//
|
// })
|
// }
|
//
|
// override fun failure(exception: TwitterException?) {
|
// Log.e("X Login","login failure:"+exception?.message)
|
// mTwitterAuthClient = null
|
// }
|
// }
|
|
tv_x.setOnClickListener {
|
if (!cb_rule.isChecked)
|
myToast(getString(R.string.please_agree))
|
else {
|
mTwitterAuthClient = TwitterAuthClient()
|
mTwitterAuthClient?.authorize(this, object : Callback<TwitterSession>() {
|
override fun success(result: Result<TwitterSession>?) {
|
val user_id = result!!.data.userId.toString()
|
Log.e("X Login", "login success:" + user_id)
|
val user_name = result.data.userName
|
var email: String?
|
val activeSession = TwitterCore.getInstance().sessionManager.activeSession
|
val client = TwitterApiClient(activeSession)
|
val accountService = client.accountService
|
val show = accountService.verifyCredentials(false, false, false)
|
show.enqueue(object : Callback<User?>() {
|
override fun success(result: Result<User?>?) {
|
email = result?.data?.email
|
twitterLogin(user_id, user_name, email)
|
}
|
|
override fun failure(exception: TwitterException?) {
|
twitterLogin(user_id, user_name, null)
|
}
|
|
})
|
}
|
|
override fun failure(exception: TwitterException?) {
|
Log.e("X Login", "login failure:" + exception?.message)
|
mTwitterAuthClient = null
|
}
|
})
|
}
|
}
|
}
|
|
//验证码登录
|
private fun codeLogin(phone: String) {
|
/* val operator = tv_operator.text.toString()
|
if (operator.isEmpty()){
|
myToast(getString(R.string.请选择运营商))
|
return@setOnClickListener
|
}*/
|
val code = et_code.text.toString()
|
if (code.isEmpty()) {
|
myToast(getString(R.string.请输入验证码))
|
return
|
}
|
if (code.length < 4) {
|
myToast(getString(R.string.验证码输入有误))
|
return
|
}
|
showDialog(getString(R.string.login_ing), false)
|
tv_action.isEnabled = false
|
HttpManager.codeLogin("", phone, code, ip).request(
|
this,
|
success = { _, data ->
|
data?.let {
|
SPUtils.instance().put(Const.User.APP_ID, it.optString("appid"))
|
.put(Const.User.TOKEN, it.optString("token"))
|
.put(Const.User.USER_ID, it.optInt("id"))
|
.put(Const.User.EMAIL, it.optString("email"))
|
.apply()
|
/* if (it.optString("email").isEmpty()) {
|
startActivity<FinishMailActivity>("isRegister" to true)
|
}*/
|
startActivity<HomeActivity>(
|
"isOpen" to HomeActivity.isOpenHome,
|
"func" to HomeActivity.funcHome,
|
"isSetPassword" to it.optString("isSetPassword")
|
)
|
finish()
|
}
|
},
|
error = { _, _ ->
|
tv_action.isEnabled = true
|
dismissDialog()
|
})
|
}
|
|
//密码登录
|
private fun passwordLogin(phone: String) {
|
// val operator = tv_operator.text.toString()
|
// if (operator.isEmpty()){
|
// myToast(getString(R.string.请选择运营商))
|
// return@setOnClickListener
|
// }
|
val pwd = et_pwd.text.toString()
|
if (pwd.length < 6) {
|
myToast(getString(R.string.请输入6到18位密码))
|
return
|
}
|
showDialog(getString(R.string.login_ing), false)
|
tv_action.isEnabled = false
|
HttpManager.pwdLogin(phone, pwd).request(this, success = { _, data ->
|
data?.let {
|
SPUtils.instance().put(Const.User.APP_ID, it.optString("appid"))
|
.put(Const.User.TOKEN, it.optString("token"))
|
.put(Const.User.USER_ID, it.optInt("id"))
|
.put(Const.User.EMAIL, it.optString("email"))
|
.apply()
|
/*if (it.optString("email").isEmpty()) {
|
startActivity<FinishMailActivity>("isRegister" to true)
|
}*/
|
startActivity<HomeActivity>("isOpen" to HomeActivity.isOpenHome, "func" to HomeActivity.funcHome)
|
finish()
|
}
|
}, error = { _, _ ->
|
tv_action.isEnabled = true
|
dismissDialog()
|
})
|
}
|
|
private fun twitterLogin(uid: String, name: String, mail: String?) {
|
HttpManager.twitterLogin(uid, name, mail).request(this) { _, data ->
|
data?.let {
|
SPUtils.instance()
|
.put(Const.User.APP_ID, it.optString("appid"))
|
.put(Const.User.TOKEN, it.optString("token"))
|
.put(Const.User.EMAIL, it.optString("email"))
|
.put(Const.User.USER_ID, it.optInt("id")).apply()
|
if (it.optInt("phone") != 2) { //没有手机号
|
startActivityForResult<BindPhoneActivity>(1)
|
SPUtils.instance().put(Const.User.NO_PHONE, true)
|
.apply()
|
}
|
finish()
|
}
|
}
|
}
|
|
override fun initView() {
|
// recaptcha = RecaptchaVisual(supportFragmentManager, WEB_SITE_KEY, BASE_URL)
|
|
// viewModel.responseText.observe(this) { response -> myToast(response) }
|
|
// val reads = getString(R.string.我已阅读并同意)
|
// val rule = getString(R.string.IGO出行用户服务协议)
|
// val s = reads + rule
|
// tv_rule.text = SpanBuilder(s).color(this, reads.length, s.length, R.color.colorBlue).build()
|
title = getString(R.string.登录名词)
|
tab_type.setTabData(arrayListOf(object : CustomTabEntity {
|
override fun getTabUnselectedIcon() = 0
|
override fun getTabSelectedIcon() = 0
|
override fun getTabTitle() = getString(R.string.密码登录)
|
}, object : CustomTabEntity {
|
override fun getTabUnselectedIcon() = 0
|
override fun getTabSelectedIcon() = 0
|
override fun getTabTitle() = getString(R.string.验证码登录)
|
}))
|
|
tv_rule.setOnClickListener { _ ->
|
if (urlxieyi.isNotEmpty()) {
|
startActivity<H5Activity>(
|
"title" to getString(R.string.用户服务协议), "url" to urlxieyi
|
)
|
return@setOnClickListener
|
}
|
HttpManager.getH5(2).request(this) { _, data ->
|
data?.let {
|
urlxieyi = it.optString(
|
"content"
|
)
|
startActivity<H5Activity>(
|
"title" to getString(R.string.用户服务协议), "url" to it.optString(
|
"content"
|
)
|
)
|
}
|
}
|
}
|
}
|
|
var urlxieyi = ""
|
|
|
// override fun onStart(p0: SHARE_MEDIA?) {
|
// Log.e("mmp", "开始了")
|
// }
|
//
|
// override fun onComplete(p0: SHARE_MEDIA?, p1: Int, p2: MutableMap<String, String>?) {
|
// showDialog()
|
// HttpManager.wxLogin(
|
// p2?.get("openid"), p2?.get("unionid"), p2?.get("iconurl"),
|
// p2?.get("name"), if (p2?.get("gender") == "男") 1 else 2
|
// ).request(this){ _, data->
|
// data?.let {
|
// SPUtils.instance().put(Const.User.APP_ID, it.optString("appid"))
|
// .put(Const.User.TOKEN, it.optString("token"))
|
// .put(Const.User.USER_ID, it.optInt("id")).apply()
|
// if (it.optInt("phone") != 2){ //没有手机号
|
// startActivityForResult<BindPhoneActivity>(1)
|
// SPUtils.instance().put(Const.User.NO_PHONE, true).apply()
|
// }else
|
// finish()
|
// }
|
// }
|
// }
|
//
|
// override fun onCancel(p0: SHARE_MEDIA?, p1: Int) {
|
// Log.e("mmp", "取消了")
|
// }
|
//
|
// override fun onError(p0: SHARE_MEDIA?, p1: Int, p2: Throwable?) {
|
// Log.e("mmp", "失败了")
|
// myToast("登录失败 原因:" + p2?.message)
|
// }
|
|
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
super.onActivityResult(requestCode, resultCode, data)
|
if (resultCode == Activity.RESULT_OK && requestCode == 1) { //三方登录手机绑定成功
|
finish()
|
}
|
if (resultCode == Activity.RESULT_OK && requestCode == 10086) {
|
data?.getStringExtra("code")?.let {
|
areaCode.text = it
|
}
|
}
|
if (requestCode == TwitterAuthConfig.DEFAULT_AUTH_REQUEST_CODE) {
|
mTwitterAuthClient?.onActivityResult(requestCode, resultCode, data)
|
}
|
}
|
|
override fun onDestroy() {
|
super.onDestroy()
|
if (this::profileTracker.isInitialized) {
|
profileTracker.stopTracking()
|
}
|
mTwitterAuthClient = null
|
}
|
}
|