@@ -6,6 +6,7 @@ import androidx.lifecycle.Observer
66import com.fmt.github.R
77import com.fmt.github.base.activity.BaseDataBindVMActivity
88import com.fmt.github.base.viewmodel.BaseViewModel
9+ import com.fmt.github.config.Configs
910import com.fmt.github.config.Settings
1011import com.fmt.github.databinding.ActivityLoginBinding
1112import com.fmt.github.ext.otherwise
@@ -16,13 +17,13 @@ import com.fmt.github.user.model.UserLoginModel
1617import com.fmt.github.user.model.UserModel
1718import com.fmt.github.user.model.db.User
1819import com.fmt.github.user.viewmodel.UserViewModel
20+ import com.fmt.github.utils.AppOpener
1921import kotlinx.android.synthetic.main.activity_login.*
2022import org.koin.androidx.viewmodel.ext.android.viewModel
23+ import java.util.*
2124
2225class LoginActivity : BaseDataBindVMActivity <ActivityLoginBinding >() {
2326
24- private var mAuthId = 0
25-
2627 private val mViewModel: UserViewModel by viewModel()
2728
2829 private val mUserLoginModel: UserLoginModel by lazy { UserLoginModel () }
@@ -35,6 +36,9 @@ class LoginActivity : BaseDataBindVMActivity<ActivityLoginBinding>() {
3536 mSignInBt.setOnClickListener {
3637 login()
3738 }
39+ mOAuthLoginIv.setOnClickListener {
40+ loginByOAuth()
41+ }
3842 }
3943
4044 override fun initData () {
@@ -64,24 +68,55 @@ class LoginActivity : BaseDataBindVMActivity<ActivityLoginBinding>() {
6468
6569 }
6670
71+ private fun loginByOAuth () {
72+ val randomState = UUID .randomUUID().toString()
73+ val url = " ${Configs .GITHUB_BASE_URL } login/oauth/authorize" +
74+ " ?client_id=" + Configs .CLIENT_ID +
75+ " &scope=" + Configs .OAUTH2_SCOPE +
76+ " &state=" + randomState
77+ AppOpener .openInBrowser(this , url)
78+ }
79+
80+ override fun onNewIntent (intent : Intent ? ) {
81+ super .onNewIntent(intent)
82+ intent?.let {
83+ val uri = it.data
84+ if (uri != null ) {
85+ val code = uri.getQueryParameter(" code" )
86+ val state = uri.getQueryParameter(" state" )
87+ getToken(code, state)
88+ }
89+ }
90+ }
91+
6792 private fun createOrGetAuthorization () {
6893 mViewModel.createOrGetAuthorization().observe(this , Observer <AuthorizationRespModel > {
6994 // 保存授权后的Token和ID
7095 Settings .Account .token = it.token
71- mAuthId = it.id
7296 // 获取用户信息
7397 getUserInfo()
7498 })
7599 }
76100
101+ private fun getToken (code : String? , state : String? ) {
102+ if (code != null && state != null ) {
103+ mOAuthProgress.visibility = View .VISIBLE
104+ mOAuthLoginIv.visibility = View .GONE
105+ mViewModel.getAccessToken(code, state).observe(this , Observer {
106+ Settings .Account .token = it.access_token
107+ getUserInfo()
108+ })
109+ }
110+ }
111+
77112 private fun getUserInfo () {
78113 mViewModel.getUser().observe(this , Observer <UserModel > {
79114 saveUserInfo(it)
80115 })
81116 }
82117
83118 private fun saveUserInfo (userModel : UserModel ) {
84- User (mAuthId , userModel.login, userModel.avatar_url).apply {
119+ User (userModel.id , userModel.login, userModel.avatar_url).apply {
85120 Settings .Account .loginUser = this .login
86121 mViewModel.saveLocalUser(this @apply)
87122 go2MainActivity()
@@ -98,5 +133,7 @@ class LoginActivity : BaseDataBindVMActivity<ActivityLoginBinding>() {
98133 override fun handleError () {
99134 mSignInBt.visibility = View .VISIBLE
100135 mProgressBar.visibility = View .GONE
136+ mOAuthLoginIv.visibility = View .VISIBLE
137+ mOAuthProgress.visibility = View .GONE
101138 }
102139}
0 commit comments