Adds saving server url

This commit is contained in:
Daniel Svitan 2025-05-17 14:28:21 +02:00
parent 3f5886ef4a
commit 015ede288f
3 changed files with 50 additions and 7 deletions

View File

@ -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()
)
}
}
}

View File

@ -5,4 +5,5 @@
<string name="show_menu">Ukázať menu</string>
<string name="auth_icon_desc">Ísť do nastavení autentikácie</string>
<string name="go_back">Ísť späť</string>
<string name="token">Token</string>
</resources>

View File

@ -5,6 +5,10 @@
<string name="show_menu">Show menu</string>
<string name="auth_icon_desc">Go to auth settings</string>
<string name="go_back">Go back</string>
<string name="token">Token</string>
<string name="settings_prefs_key" translatable="false">dev.svitan.antifed.settings</string>
<string name="server_url_key" translatable="false">server_url</string>
<string name="server_url_okay_key" translatable="false">server_url_okay</string>
<!-- Strings used for fragments for navigation -->
</resources>