🐛 Fixes auth activity doesn't load URL and token
This commit is contained in:
@@ -87,8 +87,14 @@ class AuthActivity : ComponentActivity() {
|
|||||||
return regex.matches(serverUrl)
|
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) {
|
LaunchedEffect(serverUrl) {
|
||||||
println("SERVER URL CHANGED")
|
|
||||||
apiDataHolder.serverUrl = serverUrl
|
apiDataHolder.serverUrl = serverUrl
|
||||||
prefs.edit {
|
prefs.edit {
|
||||||
putString(
|
putString(
|
||||||
@@ -107,7 +113,8 @@ class AuthActivity : ComponentActivity() {
|
|||||||
|
|
||||||
isServerUrlOk = try {
|
isServerUrlOk = try {
|
||||||
API.doesServerRespond()
|
API.doesServerRespond()
|
||||||
} catch (_: Exception) {
|
} catch (e: Exception) {
|
||||||
|
Log.e("AuthActivity", "Checking server response failed", e)
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -30,7 +30,11 @@ import androidx.compose.material3.Text
|
|||||||
import androidx.compose.material3.TopAppBar
|
import androidx.compose.material3.TopAppBar
|
||||||
import androidx.compose.material3.TopAppBarDefaults
|
import androidx.compose.material3.TopAppBarDefaults
|
||||||
import androidx.compose.material3.rememberDrawerState
|
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.rememberCoroutineScope
|
||||||
|
import androidx.compose.runtime.setValue
|
||||||
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.platform.LocalContext
|
||||||
@@ -41,6 +45,8 @@ import kotlinx.coroutines.launch
|
|||||||
|
|
||||||
@OptIn(ExperimentalMaterial3Api::class)
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
class MainActivity : ComponentActivity() {
|
class MainActivity : ComponentActivity() {
|
||||||
|
private var reload: (() -> Unit)? = null
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
enableEdgeToEdge()
|
enableEdgeToEdge()
|
||||||
@@ -58,105 +64,113 @@ class MainActivity : ComponentActivity() {
|
|||||||
val apiDataHolder = APIDataHolder.getInstance()
|
val apiDataHolder = APIDataHolder.getInstance()
|
||||||
apiDataHolder.initializeFromPrefs(context, prefs)
|
apiDataHolder.initializeFromPrefs(context, prefs)
|
||||||
|
|
||||||
ModalNavigationDrawer(
|
// TODO: fix reloading UI
|
||||||
drawerState = drawerState,
|
var uiNeedsReload by remember { mutableStateOf(false) }
|
||||||
drawerContent = {
|
reload = fun() { uiNeedsReload = true }
|
||||||
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()
|
|
||||||
|
|
||||||
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(
|
Text(
|
||||||
stringResource(R.string.actions),
|
stringResource(R.string.app_name),
|
||||||
modifier = Modifier.padding(16.dp),
|
modifier = Modifier.padding(16.dp),
|
||||||
style = MaterialTheme.typography.titleMedium
|
style = MaterialTheme.typography.titleLarge
|
||||||
)
|
|
||||||
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
|
|
||||||
)
|
)
|
||||||
|
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 ->
|
Scaffold(
|
||||||
Column(
|
topBar = {
|
||||||
horizontalAlignment = Alignment.CenterHorizontally,
|
TopAppBar(
|
||||||
verticalArrangement = Arrangement.Center,
|
colors = TopAppBarDefaults.topAppBarColors(
|
||||||
modifier = Modifier
|
titleContentColor = MaterialTheme.colorScheme.primary
|
||||||
.padding(innerPadding)
|
),
|
||||||
.fillMaxSize()
|
title = {
|
||||||
) {
|
Text(stringResource(R.string.app_name))
|
||||||
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() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
|
this.reload?.run {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user