🔨 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
import android.content.Context
import android.content.SharedPreferences
import io.ktor.client.HttpClient
import io.ktor.client.call.body
import io.ktor.client.plugins.contentnegotiation.ContentNegotiation
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.headers
import io.ktor.http.HttpStatusCode
@@ -50,6 +52,21 @@ class APIDataHolder {
var token: String = ""
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 {
private var holder: APIDataHolder = APIDataHolder()
@@ -58,10 +58,16 @@ class AuthActivity : ComponentActivity() {
setContent {
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 token by remember { mutableStateOf("") }
var showToken by remember { mutableStateOf(false) }
val apiDataHolder = APIDataHolder.getInstance()
var authId by remember { mutableStateOf("") }
var authIndex by remember { mutableIntStateOf(-1) }
@@ -76,19 +82,6 @@ class AuthActivity : ComponentActivity() {
var checkingToken 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 {
val regex = Regex("""https?://[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}(:\d+)?""")
return regex.matches(serverUrl)
@@ -1,6 +1,5 @@
package dev.svitan.antifed
import android.app.ActivityOptions
import android.content.Intent
import android.os.Bundle
import androidx.activity.ComponentActivity
@@ -34,6 +33,7 @@ import androidx.compose.material3.rememberDrawerState
import androidx.compose.runtime.rememberCoroutineScope
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 dev.svitan.antifed.ui.theme.AntiFedTheme
@@ -50,6 +50,14 @@ class MainActivity : ComponentActivity() {
val drawerState = rememberDrawerState(initialValue = DrawerValue.Closed)
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(
drawerState = drawerState,
drawerContent = {
@@ -67,8 +75,9 @@ class MainActivity : ComponentActivity() {
)
HorizontalDivider()
if (apiDataHolder.isOk) {
Text(
"Section 1",
stringResource(R.string.actions),
modifier = Modifier.padding(16.dp),
style = MaterialTheme.typography.titleMedium
)
@@ -82,6 +91,13 @@ class MainActivity : ComponentActivity() {
selected = false,
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 =
Intent(this@MainActivity, AuthActivity::class.java)
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(
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="show_token">Ukázať 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>
@@ -16,6 +16,8 @@
<string name="show_token">Show token</string>
<string name="hide_token">Hide token</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 -->
</resources>