link out to web browser for non gemini links

This commit is contained in:
Öppen 2020-08-15 21:33:44 +01:00
parent 61199d91db
commit 3ee7431485
3 changed files with 15 additions and 7 deletions

View File

@ -1,9 +1,11 @@
package oppen.tva.ui package oppen.tva.ui
import androidx.appcompat.app.AppCompatActivity import android.content.Intent
import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.view.inputmethod.EditorInfo import android.view.inputmethod.EditorInfo
import androidx.activity.viewModels import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.databinding.DataBindingUtil import androidx.databinding.DataBindingUtil
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import oppen.tva.R import oppen.tva.R
@ -12,6 +14,7 @@ import oppen.tva.io.TvaState
import oppen.tva.io.history.CacheInterface import oppen.tva.io.history.CacheInterface
import oppen.tva.ui.gemtext.GemtextAdapter import oppen.tva.ui.gemtext.GemtextAdapter
class TvaActivity : AppCompatActivity() { class TvaActivity : AppCompatActivity() {
private val model by viewModels<TvaViewModel>() private val model by viewModels<TvaViewModel>()
@ -33,7 +36,7 @@ class TvaActivity : AppCompatActivity() {
when(state){ when(state){
is TvaState.AppQuery -> TODO() is TvaState.AppQuery -> TODO()
is TvaState.Requesting -> TODO() is TvaState.Requesting -> TODO()
is TvaState.NotGeminiRequest -> TODO() is TvaState.NotGeminiRequest -> externalProtocol(state)
is TvaState.GeminiResponse -> renderGemtext(state) is TvaState.GeminiResponse -> renderGemtext(state)
TvaState.GeminiPrintWriterError -> TODO() TvaState.GeminiPrintWriterError -> TODO()
} }
@ -50,6 +53,11 @@ class TvaActivity : AppCompatActivity() {
} }
} }
private fun externalProtocol(state: TvaState.NotGeminiRequest) {
val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse(state.uri.toString()))
startActivity(browserIntent)
}
private fun renderGemtext(state: TvaState.GeminiResponse) = runOnUiThread { private fun renderGemtext(state: TvaState.GeminiResponse) = runOnUiThread {
binding.addressEdit.setText(state.uri.toString()) binding.addressEdit.setText(state.uri.toString())
adapter.render(state.lines) adapter.render(state.lines)

View File

@ -43,7 +43,7 @@ class TvaViewModel: ViewModel() {
when(state){ when(state){
is TvaState.Requesting -> {} is TvaState.Requesting -> {}
is TvaState.AppQuery -> {} is TvaState.AppQuery -> {}
is TvaState.NotGeminiRequest -> {} is TvaState.NotGeminiRequest -> onState(state)
is TvaState.GeminiResponse -> renderGemini(state) is TvaState.GeminiResponse -> renderGemini(state)
TvaState.GeminiPrintWriterError -> {} TvaState.GeminiPrintWriterError -> {}
} }

View File

@ -66,10 +66,10 @@ class GemtextAdapter(val onLink: (link: URI) -> Unit): RecyclerView.Adapter<Gemt
when(holder){ when(holder){
is ViewHolder.Text -> holder.itemView.gemtext_text_textview.text = line is ViewHolder.Text -> holder.itemView.gemtext_text_textview.text = line
is ViewHolder.H1 -> holder.itemView.gemtext_text_textview.text = line.drop(2).trim() is ViewHolder.H1 -> holder.itemView.gemtext_text_textview.text = line.substring(2)
is ViewHolder.H2 -> holder.itemView.gemtext_text_textview.text = line.drop(3).trim() is ViewHolder.H2 -> holder.itemView.gemtext_text_textview.text = line.substring(3)
is ViewHolder.H3 -> holder.itemView.gemtext_text_textview.text = line.drop(4).trim() is ViewHolder.H3 -> holder.itemView.gemtext_text_textview.text = line.substring(4)
is ViewHolder.ListItem -> holder.itemView.gemtext_text_textview.text = "${line.drop(1)}".trim() is ViewHolder.ListItem -> holder.itemView.gemtext_text_textview.text = "${line.substring(1)}".trim()
is ViewHolder.Link -> { is ViewHolder.Link -> {
println("Tva: link: $line") println("Tva: link: $line")
val linkParts = line.substring(2).trim().split("\\s+".toRegex(), 2) val linkParts = line.substring(2).trim().split("\\s+".toRegex(), 2)