Yuito-app-android/app/src/main/java/net/accelf/yuito/AccessTokenLoginActivity.kt

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.")
}
}
}