From 328ace5d27c892c57031a50bcec5661b66cc03f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96ppen?= Date: Sun, 16 Aug 2020 22:30:24 +0100 Subject: [PATCH] lots of cosmetic improvements --- app/src/main/java/oppen/Extensions.kt | 11 +++ .../java/oppen/tva/io/GeminiDatasource.kt | 3 + app/src/main/java/oppen/tva/ui/TvaActivity.kt | 12 ++- .../main/java/oppen/tva/ui/TvaViewModel.kt | 4 +- app/src/main/res/layout/activity_tva.xml | 99 +++++++++++-------- 5 files changed, 85 insertions(+), 44 deletions(-) diff --git a/app/src/main/java/oppen/Extensions.kt b/app/src/main/java/oppen/Extensions.kt index 797db00..df4ecd2 100644 --- a/app/src/main/java/oppen/Extensions.kt +++ b/app/src/main/java/oppen/Extensions.kt @@ -2,10 +2,21 @@ package oppen import android.app.AlertDialog import android.content.Context +import android.view.View fun String.alert(context: Context){ AlertDialog.Builder(context) .setMessage(this) .setPositiveButton("OK"){_, _ ->} .show() +} + +fun View.visible(visible: Boolean) = when { + visible -> this.visibility = View.VISIBLE + else -> this.visibility = View.GONE +} + +fun View.visibleRetainingSpace(visible: Boolean) = when { + visible -> this.visibility = View.VISIBLE + else -> this.visibility = View.INVISIBLE } \ No newline at end of file diff --git a/app/src/main/java/oppen/tva/io/GeminiDatasource.kt b/app/src/main/java/oppen/tva/io/GeminiDatasource.kt index 39e4845..af1486e 100644 --- a/app/src/main/java/oppen/tva/io/GeminiDatasource.kt +++ b/app/src/main/java/oppen/tva/io/GeminiDatasource.kt @@ -35,12 +35,14 @@ class GeminiDatasource: Datasource{ when { address.startsWith("//") -> { //just missing protocol + onUpdate(TvaState.Requesting(uri)) request(URI.create("gemini:$address"), onUpdate) return } address.startsWith("/") -> { //internal navigation val internalNav = "gemini://${last?.host}$address" + onUpdate(TvaState.Requesting(uri)) request(URI.create(internalNav), onUpdate) return } @@ -48,6 +50,7 @@ class GeminiDatasource: Datasource{ //looks like a relative link val lastAddress = last.toString() val relAddress = "${lastAddress.substring(0, lastAddress.lastIndexOf("/") + 1)}$address" + onUpdate(TvaState.Requesting(uri)) request(URI.create(relAddress), onUpdate) return } diff --git a/app/src/main/java/oppen/tva/ui/TvaActivity.kt b/app/src/main/java/oppen/tva/ui/TvaActivity.kt index e18749f..781e6a3 100644 --- a/app/src/main/java/oppen/tva/ui/TvaActivity.kt +++ b/app/src/main/java/oppen/tva/ui/TvaActivity.kt @@ -13,6 +13,7 @@ import oppen.tva.R import oppen.tva.databinding.ActivityTvaBinding import oppen.tva.io.TvaState import oppen.tva.io.history.CacheInterface +import oppen.visibleRetainingSpace class TvaActivity : AppCompatActivity() { @@ -35,7 +36,7 @@ class TvaActivity : AppCompatActivity() { model.initialise(CacheInterface.default(this)){ state -> when(state){ is TvaState.AppQuery -> TODO() - is TvaState.Requesting -> TODO() + is TvaState.Requesting -> loadingView(true) is TvaState.NotGeminiRequest -> externalProtocol(state) is TvaState.GeminiResponse -> renderGemtext(state) TvaState.GeminiPrintWriterError -> TODO() @@ -58,19 +59,26 @@ class TvaActivity : AppCompatActivity() { } private fun externalProtocol(state: TvaState.NotGeminiRequest) { + loadingView(false) val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse(state.uri.toString())) startActivity(browserIntent) } private fun renderGemtext(state: TvaState.GeminiResponse) = runOnUiThread { + loadingView(false) 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}") + "Server returned an error - or non gemtext mimetype not implemented yet: ${state.header}".alert(this) } } + private fun loadingView(visible: Boolean) = runOnUiThread { + binding.progressBar.visibleRetainingSpace(visible) + if(visible) binding.appBar.setExpanded(true) + } + @ExperimentalStdlibApi override fun onBackPressed() { if(model.canGoBack()){ diff --git a/app/src/main/java/oppen/tva/ui/TvaViewModel.kt b/app/src/main/java/oppen/tva/ui/TvaViewModel.kt index 30409a3..9e2d3ef 100644 --- a/app/src/main/java/oppen/tva/ui/TvaViewModel.kt +++ b/app/src/main/java/oppen/tva/ui/TvaViewModel.kt @@ -41,11 +41,11 @@ class TvaViewModel: ViewModel() { fun request(uri: URI){ gemini.request(uri){ state -> when(state){ - is TvaState.Requesting -> {} + is TvaState.Requesting -> onState(state) is TvaState.AppQuery -> {} is TvaState.NotGeminiRequest -> onState(state) is TvaState.GeminiResponse -> renderGemini(state) - TvaState.GeminiPrintWriterError -> {} + TvaState.GeminiPrintWriterError -> onState(state) } } } diff --git a/app/src/main/res/layout/activity_tva.xml b/app/src/main/res/layout/activity_tva.xml index 3370b4b..8d2f908 100644 --- a/app/src/main/res/layout/activity_tva.xml +++ b/app/src/main/res/layout/activity_tva.xml @@ -28,53 +28,72 @@ - - - - + + android:paddingTop="@dimen/default_margin" + android:paddingBottom="@dimen/default_margin"> - + - + + + + + + + + + + + +