ariane/app/src/main/java/oppen/tva/ui/TvaActivity.kt

78 lines
2.6 KiB
Kotlin
Raw Normal View History

2020-08-15 14:52:27 +00:00
package oppen.tva.ui
import android.content.Intent
import android.net.Uri
2020-08-15 14:52:27 +00:00
import android.os.Bundle
import android.view.inputmethod.EditorInfo
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
2020-08-15 14:52:27 +00:00
import androidx.databinding.DataBindingUtil
import androidx.recyclerview.widget.LinearLayoutManager
import oppen.tva.R
import oppen.tva.databinding.ActivityTvaBinding
import oppen.tva.io.TvaState
import oppen.tva.io.history.CacheInterface
import oppen.tva.ui.gemtext.GemtextAdapter
2020-08-15 14:52:27 +00:00
class TvaActivity : AppCompatActivity() {
private val model by viewModels<TvaViewModel>()
private lateinit var binding: ActivityTvaBinding
private val adapter = GemtextAdapter{ uri ->
model.request(uri)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_tva)
binding.viewmodel = model
binding.lifecycleOwner = this
binding.gemtextRecycler.layoutManager = LinearLayoutManager(this)
binding.gemtextRecycler.adapter = adapter
model.initialise(CacheInterface.default(this)){ state ->
when(state){
is TvaState.AppQuery -> TODO()
is TvaState.Requesting -> TODO()
is TvaState.NotGeminiRequest -> externalProtocol(state)
2020-08-15 14:52:27 +00:00
is TvaState.GeminiResponse -> renderGemtext(state)
TvaState.GeminiPrintWriterError -> TODO()
}
}
binding.addressEdit.setOnEditorActionListener { _, actionId, _ ->
when (actionId) {
EditorInfo.IME_ACTION_GO -> {
model.request(binding.addressEdit.text.toString())
return@setOnEditorActionListener true
}
else -> return@setOnEditorActionListener false
}
}
}
private fun externalProtocol(state: TvaState.NotGeminiRequest) {
val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse(state.uri.toString()))
startActivity(browserIntent)
}
2020-08-15 14:52:27 +00:00
private fun renderGemtext(state: TvaState.GeminiResponse) = runOnUiThread {
2020-08-15 20:44:57 +00:00
if(state.header.startsWith("2") && state.header.contains("text/gemini")) {
binding.addressEdit.setText(state.uri.toString())
adapter.render(state.lines)
}else{
println("Server returned an error - or non gemtext mimetype: ${state.header}")
}
2020-08-15 14:52:27 +00:00
}
2020-08-15 20:20:15 +00:00
@ExperimentalStdlibApi
override fun onBackPressed() {
if(model.canGoBack()){
model.goBack()
}else{
super.onBackPressed()
}
}
2020-08-15 14:52:27 +00:00
}