From 5d81e98b02ffc6bad0d11ee7b2500475cfd47a0e Mon Sep 17 00:00:00 2001 From: Sweetbread Date: Tue, 22 Apr 2025 15:37:56 +0300 Subject: [PATCH] feat: add apply button and input handler --- .idea/misc.xml | 1 - .../main/java/ru/risdeveau/geotracker/API.kt | 6 +++-- .../ru/risdeveau/geotracker/MainActivity.kt | 26 +++++++++++++++++-- app/src/main/res/values-ru/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 5 files changed, 30 insertions(+), 5 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index 2cdc89a..f7608ed 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,4 +1,3 @@ - diff --git a/app/src/main/java/ru/risdeveau/geotracker/API.kt b/app/src/main/java/ru/risdeveau/geotracker/API.kt index e28e4b4..dc63156 100644 --- a/app/src/main/java/ru/risdeveau/geotracker/API.kt +++ b/app/src/main/java/ru/risdeveau/geotracker/API.kt @@ -30,8 +30,10 @@ data class GeoData( * @return true if baseurl is valid */ suspend fun health(baseurl: String): Boolean { - val r = client.get("$baseurl/health") - return r.status == HttpStatusCode.OK + try { + val r = client.get("$baseurl/health") + return r.status == HttpStatusCode.OK + } catch (_: Exception) { return false } } /** diff --git a/app/src/main/java/ru/risdeveau/geotracker/MainActivity.kt b/app/src/main/java/ru/risdeveau/geotracker/MainActivity.kt index 1741e2c..f18b585 100644 --- a/app/src/main/java/ru/risdeveau/geotracker/MainActivity.kt +++ b/app/src/main/java/ru/risdeveau/geotracker/MainActivity.kt @@ -12,7 +12,10 @@ import androidx.activity.enableEdgeToEdge import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.material3.Button import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.MaterialTheme import androidx.compose.material3.OutlinedTextField @@ -29,10 +32,14 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.style.TextDecoration +import androidx.compose.ui.unit.dp +import kotlinx.coroutines.delay import kotlinx.coroutines.launch +import org.intellij.lang.annotations.JdkConstants import ru.risdeveau.geotracker.ui.theme.GeoTrackerTheme import splitties.resources.appColor import splitties.resources.appStr +import kotlin.apply class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { @@ -87,9 +94,19 @@ sealed class Screen { fun Settings(modifier: Modifier = Modifier) { var username by remember { mutableStateOf("") } var url by remember { mutableStateOf("") } + var urlIsValid by remember { mutableStateOf(false) } + var loading by remember { mutableStateOf(false) } + LaunchedEffect(url) { + if (url.isNotEmpty()) { + delay(1000) + loading = true + urlIsValid = health(url) + loading = false + } + } - Column (modifier = modifier) { + Column (modifier = modifier, horizontalAlignment = Alignment.CenterHorizontally) { OutlinedTextField( value = username, onValueChange = { username = it }, @@ -100,7 +117,12 @@ fun Settings(modifier: Modifier = Modifier) { value = url, onValueChange = { url = it }, placeholder = { Text("https://geo.example.com", style = TextStyle(color = MaterialTheme.colorScheme.onSurfaceVariant)) }, - label = { Text(appStr(R.string.server_url)) } + label = { Text(appStr(R.string.server_url)) }, + trailingIcon = { if (loading) CircularProgressIndicator() } ) + + Button({}, enabled = urlIsValid) { + Text(appStr(R.string.apply)) + } } } \ No newline at end of file diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 522256d..917a437 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -2,4 +2,5 @@ Псевдоним URL Сервера + Применить \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 921b61a..4683924 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -2,4 +2,5 @@ GeoTracker Username Server URL + Apply \ No newline at end of file