From 7194b95182bf50855161dd3905801fee66699434 Mon Sep 17 00:00:00 2001 From: Ash Svitan Date: Fri, 17 Apr 2026 15:39:11 +0200 Subject: [PATCH] :hammer: Refactors retrieving prefs for API data --- .../src/main/java/dev/svitan/antifed/API.kt | 19 ++++++- .../java/dev/svitan/antifed/AuthActivity.kt | 21 +++---- .../java/dev/svitan/antifed/MainActivity.kt | 57 +++++++++++++------ .../app/src/main/res/values-sk/strings.xml | 2 + frontend/app/src/main/res/values/strings.xml | 2 + 5 files changed, 69 insertions(+), 32 deletions(-) diff --git a/frontend/app/src/main/java/dev/svitan/antifed/API.kt b/frontend/app/src/main/java/dev/svitan/antifed/API.kt index 70321cf..1f4d53d 100644 --- a/frontend/app/src/main/java/dev/svitan/antifed/API.kt +++ b/frontend/app/src/main/java/dev/svitan/antifed/API.kt @@ -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() 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 68c0546..67cb6ce 100644 --- a/frontend/app/src/main/java/dev/svitan/antifed/AuthActivity.kt +++ b/frontend/app/src/main/java/dev/svitan/antifed/AuthActivity.kt @@ -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) diff --git a/frontend/app/src/main/java/dev/svitan/antifed/MainActivity.kt b/frontend/app/src/main/java/dev/svitan/antifed/MainActivity.kt index deb10dd..de1b3d3 100644 --- a/frontend/app/src/main/java/dev/svitan/antifed/MainActivity.kt +++ b/frontend/app/src/main/java/dev/svitan/antifed/MainActivity.kt @@ -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,21 +75,29 @@ class MainActivity : ComponentActivity() { ) HorizontalDivider() - Text( - "Section 1", - modifier = Modifier.padding(16.dp), - style = MaterialTheme.typography.titleMedium - ) - NavigationDrawerItem( - label = { Text("Item 1") }, - selected = false, - onClick = { /* Handle click */ } - ) - NavigationDrawerItem( - label = { Text("Item 2") }, - selected = false, - onClick = { /* Handle click */ } - ) + if (apiDataHolder.isOk) { + Text( + stringResource(R.string.actions), + modifier = Modifier.padding(16.dp), + style = MaterialTheme.typography.titleMedium + ) + NavigationDrawerItem( + label = { Text("Item 1") }, + selected = false, + onClick = { /* Handle click */ } + ) + NavigationDrawerItem( + label = { Text("Item 2") }, + 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() + } } diff --git a/frontend/app/src/main/res/values-sk/strings.xml b/frontend/app/src/main/res/values-sk/strings.xml index dd11a7b..31bc585 100644 --- a/frontend/app/src/main/res/values-sk/strings.xml +++ b/frontend/app/src/main/res/values-sk/strings.xml @@ -10,4 +10,6 @@ Biometrika Ukázať token Skryť token + Akcie + Nie ste prihlásený*á \ 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 8c3464c..d80f556 100644 --- a/frontend/app/src/main/res/values/strings.xml +++ b/frontend/app/src/main/res/values/strings.xml @@ -16,6 +16,8 @@ Show token Hide token token_okay + Actions + Not signed in \ No newline at end of file