From 3885474e976d434bb391ddfe25c5b5d4908d32e8 Mon Sep 17 00:00:00 2001 From: Ash Svitan Date: Fri, 17 Apr 2026 15:52:55 +0200 Subject: [PATCH] :bug: Fixes auth activity doesn't load URL and token --- .../java/dev/svitan/antifed/AuthActivity.kt | 11 +- .../java/dev/svitan/antifed/MainActivity.kt | 195 ++++++++++-------- 2 files changed, 114 insertions(+), 92 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 67cb6ce..4fec84a 100644 --- a/frontend/app/src/main/java/dev/svitan/antifed/AuthActivity.kt +++ b/frontend/app/src/main/java/dev/svitan/antifed/AuthActivity.kt @@ -87,8 +87,14 @@ class AuthActivity : ComponentActivity() { return regex.matches(serverUrl) } + LaunchedEffect(Unit) { + serverUrl = apiDataHolder.serverUrl + token = apiDataHolder.token + isServerUrlOk = prefs.getBoolean(context.getString(R.string.server_url_okay_key), false) + isTokenOk = prefs.getBoolean(context.getString(R.string.token_okay_key), false) + } + LaunchedEffect(serverUrl) { - println("SERVER URL CHANGED") apiDataHolder.serverUrl = serverUrl prefs.edit { putString( @@ -107,7 +113,8 @@ class AuthActivity : ComponentActivity() { isServerUrlOk = try { API.doesServerRespond() - } catch (_: Exception) { + } catch (e: Exception) { + Log.e("AuthActivity", "Checking server response failed", e) false } 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 de1b3d3..619da39 100644 --- a/frontend/app/src/main/java/dev/svitan/antifed/MainActivity.kt +++ b/frontend/app/src/main/java/dev/svitan/antifed/MainActivity.kt @@ -30,7 +30,11 @@ import androidx.compose.material3.Text import androidx.compose.material3.TopAppBar import androidx.compose.material3.TopAppBarDefaults import androidx.compose.material3.rememberDrawerState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext @@ -41,6 +45,8 @@ import kotlinx.coroutines.launch @OptIn(ExperimentalMaterial3Api::class) class MainActivity : ComponentActivity() { + private var reload: (() -> Unit)? = null + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) enableEdgeToEdge() @@ -58,105 +64,113 @@ class MainActivity : ComponentActivity() { val apiDataHolder = APIDataHolder.getInstance() apiDataHolder.initializeFromPrefs(context, prefs) - ModalNavigationDrawer( - drawerState = drawerState, - drawerContent = { - ModalDrawerSheet { - Column( - modifier = Modifier - .padding(horizontal = 16.dp) - .verticalScroll(rememberScrollState()) - ) { - Spacer(modifier = Modifier.height(24.dp)) - Text( - stringResource(R.string.app_name), - modifier = Modifier.padding(16.dp), - style = MaterialTheme.typography.titleLarge - ) - HorizontalDivider() + // TODO: fix reloading UI + var uiNeedsReload by remember { mutableStateOf(false) } + reload = fun() { uiNeedsReload = true } - if (apiDataHolder.isOk) { + if (!uiNeedsReload) { + ModalNavigationDrawer( + drawerState = drawerState, + drawerContent = { + ModalDrawerSheet { + Column( + modifier = Modifier + .padding(horizontal = 16.dp) + .verticalScroll(rememberScrollState()) + ) { + Spacer(modifier = Modifier.height(24.dp)) Text( - stringResource(R.string.actions), + stringResource(R.string.app_name), 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 + style = MaterialTheme.typography.titleLarge ) + HorizontalDivider() + + 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 + ) + } } } - } - }, - ) { - Scaffold( - topBar = { - TopAppBar( - colors = TopAppBarDefaults.topAppBarColors( - titleContentColor = MaterialTheme.colorScheme.primary - ), - title = { - Text(stringResource(R.string.app_name)) - }, - navigationIcon = { - IconButton(onClick = { - scope.launch { - if (drawerState.isClosed) { - drawerState.open() - } else { - drawerState.close() - } - } - }) { - Icon( - imageVector = Icons.Outlined.Menu, - contentDescription = stringResource(R.string.show_menu) - ) - } - }, - actions = { - IconButton(onClick = { - val intent = - Intent(this@MainActivity, AuthActivity::class.java) - startActivity(intent) - overridePendingTransition( - R.anim.slide_in_right, - R.anim.slide_out_left - ) - }) { - Icon( - imageVector = Icons.Outlined.AccountCircle, - contentDescription = stringResource(R.string.auth_icon_desc) - ) - } - } - ) }, - modifier = Modifier.fillMaxSize() - ) { innerPadding -> - Column( - horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.Center, - modifier = Modifier - .padding(innerPadding) - .fillMaxSize() - ) { - Text(stringResource(R.string.app_name)) + ) { + Scaffold( + topBar = { + TopAppBar( + colors = TopAppBarDefaults.topAppBarColors( + titleContentColor = MaterialTheme.colorScheme.primary + ), + title = { + Text(stringResource(R.string.app_name)) + }, + navigationIcon = { + IconButton(onClick = { + scope.launch { + if (drawerState.isClosed) { + drawerState.open() + } else { + drawerState.close() + } + } + }) { + Icon( + imageVector = Icons.Outlined.Menu, + contentDescription = stringResource(R.string.show_menu) + ) + } + }, + actions = { + IconButton(onClick = { + val intent = + Intent(this@MainActivity, AuthActivity::class.java) + startActivity(intent) + overridePendingTransition( + R.anim.slide_in_right, + R.anim.slide_out_left + ) + }) { + Icon( + imageVector = Icons.Outlined.AccountCircle, + contentDescription = stringResource(R.string.auth_icon_desc) + ) + } + } + ) + }, + modifier = Modifier.fillMaxSize() + ) { innerPadding -> + Column( + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Center, + modifier = Modifier + .padding(innerPadding) + .fillMaxSize() + ) { + Text(stringResource(R.string.app_name)) + } } } + } else { + uiNeedsReload = false } } } @@ -164,5 +178,6 @@ class MainActivity : ComponentActivity() { override fun onResume() { super.onResume() + this.reload?.run {} } }