From 015ede288f5b2da1645393d952fba3f17bdb8400 Mon Sep 17 00:00:00 2001 From: Daniel Svitan Date: Sat, 17 May 2025 14:28:21 +0200 Subject: [PATCH] :sparkles: Adds saving server url --- .../java/dev/svitan/antifed/AuthActivity.kt | 52 ++++++++++++++++--- .../app/src/main/res/values-sk/strings.xml | 1 + frontend/app/src/main/res/values/strings.xml | 4 ++ 3 files changed, 50 insertions(+), 7 deletions(-) diff --git a/frontend/app/src/main/java/dev/svitan/antifed/AuthActivity.kt b/frontend/app/src/main/java/dev/svitan/antifed/AuthActivity.kt index a60de65..2f67b49 100644 --- a/frontend/app/src/main/java/dev/svitan/antifed/AuthActivity.kt +++ b/frontend/app/src/main/java/dev/svitan/antifed/AuthActivity.kt @@ -30,6 +30,7 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp @@ -48,9 +49,22 @@ class AuthActivity : ComponentActivity() { setContent { AntiFedTheme { var serverUrl by remember { mutableStateOf("") } + var token by remember { mutableStateOf("") } + + var needToCheckUrl by remember { mutableStateOf(false) } var checkingUrl by remember { mutableStateOf(false) } var isServerUrlOk by remember { mutableStateOf(false) } + val prefs = LocalContext.current.getSharedPreferences( + stringResource(R.string.settings_prefs_key), + MODE_PRIVATE + ) + val loadedServerUrl = prefs.getString(getString(R.string.server_url_key), "") ?: "" + if (loadedServerUrl.isNotBlank()) { + serverUrl = loadedServerUrl + } + isServerUrlOk = prefs.getBoolean(getString(R.string.server_url_okay_key), false) + fun serverUrlMatches(): Boolean { var re = Regex( "(?:http[s]?:\\/\\/.)?(?:www\\.)?[-a-zA-Z0-9@%._\\+~#=]{2,256}\\.[a-z]{2,6}\\b(?:[-a-zA-Z0-9@:%_\\+.~#?&\\/\\/=]*)", @@ -60,15 +74,18 @@ class AuthActivity : ComponentActivity() { } LaunchedEffect(serverUrl) { - if (serverUrl.isBlank()) { + if (!needToCheckUrl) return@LaunchedEffect + else { isServerUrlOk = false - return@LaunchedEffect - } - if (!serverUrlMatches()) { - isServerUrlOk = false - return@LaunchedEffect + with(prefs.edit()) { + putBoolean(getString(R.string.server_url_okay_key), false) + apply() + } } + if (serverUrl.isBlank()) return@LaunchedEffect + if (!serverUrlMatches()) return@LaunchedEffect + delay(1000) checkingUrl = true @@ -76,7 +93,12 @@ class AuthActivity : ComponentActivity() { val response = client.get(serverUrl) checkingUrl = false + needToCheckUrl = false isServerUrlOk = response.status == HttpStatusCode.OK + with(prefs.edit()) { + putBoolean(getString(R.string.server_url_okay_key), isServerUrlOk) + apply() + } } Scaffold( @@ -113,7 +135,14 @@ class AuthActivity : ComponentActivity() { TextField( value = serverUrl, - onValueChange = { serverUrl = it }, + onValueChange = { + needToCheckUrl = true + serverUrl = it + with(prefs.edit()) { + putString(getString(R.string.server_url_key), it) + apply() + } + }, label = { Text(stringResource(R.string.server_url)) }, singleLine = true, isError = !isServerUrlOk, @@ -126,6 +155,15 @@ class AuthActivity : ComponentActivity() { ) } ) + Spacer(modifier = Modifier.height(12.dp)) + + TextField( + value = token, + onValueChange = { token = it }, + label = { Text(stringResource(R.string.token)) }, + singleLine = true, + isError = token.isBlank() + ) } } } diff --git a/frontend/app/src/main/res/values-sk/strings.xml b/frontend/app/src/main/res/values-sk/strings.xml index 24847df..4aba68d 100644 --- a/frontend/app/src/main/res/values-sk/strings.xml +++ b/frontend/app/src/main/res/values-sk/strings.xml @@ -5,4 +5,5 @@ Ukázať menu Ísť do nastavení autentikácie Ísť späť + Token \ No newline at end of file diff --git a/frontend/app/src/main/res/values/strings.xml b/frontend/app/src/main/res/values/strings.xml index 4028c5d..54beea2 100644 --- a/frontend/app/src/main/res/values/strings.xml +++ b/frontend/app/src/main/res/values/strings.xml @@ -5,6 +5,10 @@ Show menu Go to auth settings Go back + Token + dev.svitan.antifed.settings + server_url + server_url_okay \ No newline at end of file