mirror of https://git.sr.ht/~oppen/ariane
57 lines
2.0 KiB
Kotlin
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)
|
|
}
|
|
} |