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

57 lines
2.0 KiB
Kotlin

package oppen.tva.ui
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.inputmethod.EditorInfo
import androidx.activity.viewModels
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
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 -> TODO()
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 renderGemtext(state: TvaState.GeminiResponse) = runOnUiThread {
binding.addressEdit.setText(state.uri.toString())
adapter.render(state.lines)
}
}