🐛 Fixes auth activity doesn't load URL and token

This commit is contained in:
2026-04-17 15:52:55 +02:00
parent 7194b95182
commit 3885474e97
2 changed files with 114 additions and 92 deletions
@@ -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
}
@@ -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 {}
}
}