72 lines
2.5 KiB
Kotlin
72 lines
2.5 KiB
Kotlin
package net.accelf.yuito
|
|
|
|
import android.content.Intent
|
|
import android.os.Bundle
|
|
import androidx.appcompat.app.AppCompatActivity
|
|
import at.connyduck.calladapter.networkresult.onFailure
|
|
import at.connyduck.calladapter.networkresult.onSuccess
|
|
import com.keylesspalace.tusky.MainActivity
|
|
import com.keylesspalace.tusky.R
|
|
import com.keylesspalace.tusky.databinding.ActivityAccessTokenLoginBinding
|
|
import com.keylesspalace.tusky.db.AccountManager
|
|
import com.keylesspalace.tusky.di.Injectable
|
|
import com.keylesspalace.tusky.network.MastodonApi
|
|
import com.keylesspalace.tusky.util.viewBinding
|
|
import kotlinx.coroutines.runBlocking
|
|
import javax.inject.Inject
|
|
|
|
class AccessTokenLoginActivity : AppCompatActivity(), Injectable {
|
|
|
|
@Inject
|
|
lateinit var accountManager: AccountManager
|
|
|
|
@Inject
|
|
lateinit var mastodonApi: MastodonApi
|
|
|
|
private val binding by viewBinding(ActivityAccessTokenLoginBinding::inflate)
|
|
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
super.onCreate(savedInstanceState)
|
|
setContentView(binding.root)
|
|
|
|
binding.authorizeButton.setOnClickListener {
|
|
it.isEnabled = false
|
|
runBlocking { authorize() }
|
|
it.isEnabled = true
|
|
}
|
|
|
|
log("Input domain and access token to login.")
|
|
}
|
|
|
|
private fun log(text: String) {
|
|
runOnUiThread {
|
|
binding.logTextView.text = String.format("%s\n%s", binding.logTextView.text.toString(), text)
|
|
}
|
|
}
|
|
|
|
private suspend fun authorize() {
|
|
if (binding.domainEditText.text.isNullOrBlank()) {
|
|
return
|
|
}
|
|
|
|
val domain = binding.domainEditText.text.toString()
|
|
val accessToken = binding.accessTokenEditText.text.toString()
|
|
log("Starting login test. [domain: $domain, accessToken: $accessToken]")
|
|
mastodonApi.accountVerifyCredentials(domain, auth = "Bearer $accessToken")
|
|
.onSuccess { account ->
|
|
log("Login successful. Moving to account registration phase.")
|
|
accountManager.addAccount(accessToken, domain, "", "", "", account)
|
|
log("Completed. Enjoy!")
|
|
val intent = Intent(this, MainActivity::class.java)
|
|
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
|
|
startActivity(intent)
|
|
finish()
|
|
overridePendingTransition(R.anim.explode, R.anim.explode)
|
|
}
|
|
.onFailure { e ->
|
|
log("Login failed. ${e.message}")
|
|
log("Aborting.")
|
|
}
|
|
}
|
|
}
|