🔨 Refactors retrieving prefs for API data

This commit is contained in:
2026-04-17 15:39:11 +02:00
parent c23dd8d518
commit 7194b95182
5 changed files with 69 additions and 32 deletions
@@ -1,9 +1,11 @@
package dev.svitan.antifed package dev.svitan.antifed
import android.content.Context
import android.content.SharedPreferences
import io.ktor.client.HttpClient import io.ktor.client.HttpClient
import io.ktor.client.call.body import io.ktor.client.call.body
import io.ktor.client.plugins.contentnegotiation.ContentNegotiation
import io.ktor.client.engine.cio.CIO import io.ktor.client.engine.cio.CIO
import io.ktor.client.plugins.contentnegotiation.ContentNegotiation
import io.ktor.client.request.get import io.ktor.client.request.get
import io.ktor.client.request.headers import io.ktor.client.request.headers
import io.ktor.http.HttpStatusCode import io.ktor.http.HttpStatusCode
@@ -50,6 +52,21 @@ class APIDataHolder {
var token: String = "" var token: String = ""
var isOk: Boolean = false var isOk: Boolean = false
private var initialized: Boolean = false
fun initializeFromPrefs(context: Context, prefs: SharedPreferences) {
if (initialized) return;
serverUrl = prefs.getString(context.getString(R.string.server_url_key), "") ?: ""
token = prefs.getString(context.getString(R.string.token_key), "") ?: ""
val isServerUrlOk = prefs.getBoolean(context.getString(R.string.server_url_okay_key), false)
val isTokenOk = prefs.getBoolean(context.getString(R.string.token_okay_key), false)
isOk = isServerUrlOk && isTokenOk
initialized = true
}
companion object { companion object {
private var holder: APIDataHolder = APIDataHolder() private var holder: APIDataHolder = APIDataHolder()
@@ -58,10 +58,16 @@ class AuthActivity : ComponentActivity() {
setContent { setContent {
AntiFedTheme { AntiFedTheme {
val context = LocalContext.current
val prefs = context.getSharedPreferences(
stringResource(R.string.settings_prefs_key), MODE_PRIVATE
)
val apiDataHolder = APIDataHolder.getInstance()
apiDataHolder.initializeFromPrefs(context, prefs)
var serverUrl by remember { mutableStateOf("") } var serverUrl by remember { mutableStateOf("") }
var token by remember { mutableStateOf("") } var token by remember { mutableStateOf("") }
var showToken by remember { mutableStateOf(false) } var showToken by remember { mutableStateOf(false) }
val apiDataHolder = APIDataHolder.getInstance()
var authId by remember { mutableStateOf("") } var authId by remember { mutableStateOf("") }
var authIndex by remember { mutableIntStateOf(-1) } var authIndex by remember { mutableIntStateOf(-1) }
@@ -76,19 +82,6 @@ class AuthActivity : ComponentActivity() {
var checkingToken by remember { mutableStateOf(false) } var checkingToken by remember { mutableStateOf(false) }
var isTokenOk by remember { mutableStateOf(false) } var isTokenOk by remember { mutableStateOf(false) }
val context = LocalContext.current
val prefs = context.getSharedPreferences(
stringResource(R.string.settings_prefs_key), MODE_PRIVATE
)
LaunchedEffect(Unit) {
serverUrl = prefs.getString(getString(R.string.server_url_key), "") ?: ""
token = prefs.getString(getString(R.string.token_key), "") ?: ""
authId = prefs.getString(getString(R.string.auth_id_key), "") ?: ""
isServerUrlOk = prefs.getBoolean(getString(R.string.server_url_okay_key), false)
isTokenOk = prefs.getBoolean(getString(R.string.token_okay_key), false)
}
fun serverUrlMatches(): Boolean { fun serverUrlMatches(): Boolean {
val regex = Regex("""https?://[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}(:\d+)?""") val regex = Regex("""https?://[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}(:\d+)?""")
return regex.matches(serverUrl) return regex.matches(serverUrl)
@@ -1,6 +1,5 @@
package dev.svitan.antifed package dev.svitan.antifed
import android.app.ActivityOptions
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import androidx.activity.ComponentActivity import androidx.activity.ComponentActivity
@@ -34,6 +33,7 @@ import androidx.compose.material3.rememberDrawerState
import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import dev.svitan.antifed.ui.theme.AntiFedTheme import dev.svitan.antifed.ui.theme.AntiFedTheme
@@ -50,6 +50,14 @@ class MainActivity : ComponentActivity() {
val drawerState = rememberDrawerState(initialValue = DrawerValue.Closed) val drawerState = rememberDrawerState(initialValue = DrawerValue.Closed)
val scope = rememberCoroutineScope() val scope = rememberCoroutineScope()
val context = LocalContext.current
val prefs = context.getSharedPreferences(
stringResource(R.string.settings_prefs_key), MODE_PRIVATE
)
val apiDataHolder = APIDataHolder.getInstance()
apiDataHolder.initializeFromPrefs(context, prefs)
ModalNavigationDrawer( ModalNavigationDrawer(
drawerState = drawerState, drawerState = drawerState,
drawerContent = { drawerContent = {
@@ -67,8 +75,9 @@ class MainActivity : ComponentActivity() {
) )
HorizontalDivider() HorizontalDivider()
if (apiDataHolder.isOk) {
Text( Text(
"Section 1", stringResource(R.string.actions),
modifier = Modifier.padding(16.dp), modifier = Modifier.padding(16.dp),
style = MaterialTheme.typography.titleMedium style = MaterialTheme.typography.titleMedium
) )
@@ -82,6 +91,13 @@ class MainActivity : ComponentActivity() {
selected = false, selected = false,
onClick = { /* Handle click */ } onClick = { /* Handle click */ }
) )
} else {
Text(
stringResource(R.string.not_signed_in),
modifier = Modifier.padding(16.dp),
style = MaterialTheme.typography.titleMedium
)
}
} }
} }
}, },
@@ -116,7 +132,10 @@ class MainActivity : ComponentActivity() {
val intent = val intent =
Intent(this@MainActivity, AuthActivity::class.java) Intent(this@MainActivity, AuthActivity::class.java)
startActivity(intent) startActivity(intent)
overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left) overridePendingTransition(
R.anim.slide_in_right,
R.anim.slide_out_left
)
}) { }) {
Icon( Icon(
imageVector = Icons.Outlined.AccountCircle, imageVector = Icons.Outlined.AccountCircle,
@@ -142,4 +161,8 @@ class MainActivity : ComponentActivity() {
} }
} }
} }
override fun onResume() {
super.onResume()
}
} }
@@ -10,4 +10,6 @@
<string name="bio">Biometrika</string> <string name="bio">Biometrika</string>
<string name="show_token">Ukázať token</string> <string name="show_token">Ukázať token</string>
<string name="hide_token">Skryť token</string> <string name="hide_token">Skryť token</string>
<string name="actions">Akcie</string>
<string name="not_signed_in">Nie ste prihlásený*á</string>
</resources> </resources>
@@ -16,6 +16,8 @@
<string name="show_token">Show token</string> <string name="show_token">Show token</string>
<string name="hide_token">Hide token</string> <string name="hide_token">Hide token</string>
<string name="token_okay_key" translatable="false">token_okay</string> <string name="token_okay_key" translatable="false">token_okay</string>
<string name="actions">Actions</string>
<string name="not_signed_in">Not signed in</string>
<!-- Strings used for fragments for navigation --> <!-- Strings used for fragments for navigation -->
</resources> </resources>