From de41e4a64e9ece6f6b92f6bd92e3b736ee18299c Mon Sep 17 00:00:00 2001 From: Daniel Svitan Date: Fri, 16 May 2025 16:33:51 +0200 Subject: [PATCH] :sparkles: Adds server url input to auth --- .../java/dev/svitan/antifed/AuthActivity.kt | 35 ++++-- .../java/dev/svitan/antifed/MainActivity.kt | 108 +++++------------- .../app/src/main/res/values-sk/strings.xml | 6 +- frontend/app/src/main/res/values/strings.xml | 47 +------- 4 files changed, 65 insertions(+), 131 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 878c3f6..a9059e1 100644 --- a/frontend/app/src/main/java/dev/svitan/antifed/AuthActivity.kt +++ b/frontend/app/src/main/java/dev/svitan/antifed/AuthActivity.kt @@ -4,15 +4,16 @@ import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.padding -import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.Scaffold -import androidx.compose.material3.Text +import androidx.compose.foundation.layout.* +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Refresh +import androidx.compose.material3.* +import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp import dev.svitan.antifed.ui.theme.AntiFedTheme @OptIn(ExperimentalMaterial3Api::class) @@ -22,6 +23,15 @@ class AuthActivity : ComponentActivity() { enableEdgeToEdge() setContent { AntiFedTheme { + var serverUrl by remember { mutableStateOf("") } + fun isServerUrlOkay(): Boolean { + var re = Regex( + "(?:http[s]?:\\/\\/.)?(?:www\\.)?[-a-zA-Z0-9@%._\\+~#=]{2,256}\\.[a-z]{2,6}\\b(?:[-a-zA-Z0-9@:%_\\+.~#?&\\/\\/=]*)", + RegexOption.DOT_MATCHES_ALL + ) + return re.containsMatchIn(serverUrl) + } + Scaffold( modifier = Modifier.fillMaxSize() ) { innerPadding -> @@ -32,7 +42,16 @@ class AuthActivity : ComponentActivity() { .padding(innerPadding) .fillMaxSize() ) { - Text("Welcome to the auth activity!!") + Text(stringResource(R.string.auth), fontSize = 24.sp) + Spacer(modifier = Modifier.height(16.dp)) + + TextField( + value = serverUrl, + onValueChange = { serverUrl = it }, + label = { Text(stringResource(R.string.server_url)) }, + singleLine = true, + isError = !isServerUrlOkay(), + ) } } } 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 45ce80c..3c72c34 100644 --- a/frontend/app/src/main/java/dev/svitan/antifed/MainActivity.kt +++ b/frontend/app/src/main/java/dev/svitan/antifed/MainActivity.kt @@ -5,37 +5,18 @@ import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.rememberScrollState -import androidx.compose.foundation.verticalScroll +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.* import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Info +import androidx.compose.material.icons.filled.AccountCircle import androidx.compose.material.icons.filled.Menu -import androidx.compose.material.icons.filled.Settings -import androidx.compose.material3.Button -import androidx.compose.material3.DrawerValue -import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.HorizontalDivider -import androidx.compose.material3.Icon -import androidx.compose.material3.IconButton -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.ModalDrawerSheet -import androidx.compose.material3.ModalNavigationDrawer -import androidx.compose.material3.NavigationDrawerItem -import androidx.compose.material3.Scaffold -import androidx.compose.material3.Text -import androidx.compose.material3.TopAppBar -import androidx.compose.material3.TopAppBarDefaults -import androidx.compose.material3.rememberDrawerState -import androidx.compose.runtime.Composable -import androidx.compose.runtime.rememberCoroutineScope -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier +import androidx.compose.material.icons.outlined.AccountCircle +import androidx.compose.material.icons.outlined.Menu +import androidx.compose.material.icons.sharp.AccountCircle +import androidx.compose.material.icons.twotone.AccountCircle +import androidx.compose.material3.* +import androidx.compose.runtime.* +import androidx.compose.ui.* import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp @@ -64,7 +45,7 @@ class MainActivity : ComponentActivity() { ) { Spacer(modifier = Modifier.height(24.dp)) Text( - "Drawer Title", + stringResource(R.string.app_name), modifier = Modifier.padding(16.dp), style = MaterialTheme.typography.titleLarge ) @@ -85,38 +66,6 @@ class MainActivity : ComponentActivity() { selected = false, onClick = { /* Handle click */ } ) - - HorizontalDivider(modifier = Modifier.padding(vertical = 8.dp)) - - Text( - "Section 2", - modifier = Modifier.padding(16.dp), - style = MaterialTheme.typography.titleMedium - ) - NavigationDrawerItem( - label = { Text("Settings") }, - selected = false, - icon = { - Icon( - Icons.Filled.Settings, - contentDescription = null - ) - }, - badge = { Text("20") }, // Placeholder - onClick = { /* Handle click */ } - ) - NavigationDrawerItem( - label = { Text("Help and feedback") }, - selected = false, - icon = { - Icon( - Icons.Filled.Info, - contentDescription = null - ) - }, - onClick = { /* Handle click */ }, - ) - Spacer(modifier = Modifier.height(12.dp)) } } }, @@ -142,8 +91,23 @@ class MainActivity : ComponentActivity() { } }) { Icon( - imageVector = Icons.Filled.Menu, - contentDescription = "Show menu" + imageVector = Icons.Outlined.Menu, + contentDescription = stringResource(R.string.show_menu) + ) + } + }, + actions = { + IconButton(onClick = { + context.startActivity( + Intent( + context, + AuthActivity::class.java + ) + ) + }) { + Icon( + imageVector = Icons.Outlined.AccountCircle, + contentDescription = stringResource(R.string.auth_icon_desc) ) } } @@ -158,13 +122,7 @@ class MainActivity : ComponentActivity() { .padding(innerPadding) .fillMaxSize() ) { - Greeting(name = "Android") - - Button(onClick = { - context.startActivity(Intent(context, AuthActivity::class.java)) - }) { - Text("Click me!") - } + Text(stringResource(R.string.app_name)) } } } @@ -172,11 +130,3 @@ class MainActivity : ComponentActivity() { } } } - -@Composable -fun Greeting(name: String, modifier: Modifier = Modifier) { - Text( - text = stringResource(R.string.greeting, name), - modifier = modifier - ) -} diff --git a/frontend/app/src/main/res/values-sk/strings.xml b/frontend/app/src/main/res/values-sk/strings.xml index fb93cb0..f473c61 100644 --- a/frontend/app/src/main/res/values-sk/strings.xml +++ b/frontend/app/src/main/res/values-sk/strings.xml @@ -1,5 +1,7 @@ - AntiFed - Ahoj %s, od AntiFed! + URL serveru + AntiFed autentikácia + Ukázať menu + Ísť do nastavení autentikácie \ 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 67bc07f..763065f 100644 --- a/frontend/app/src/main/res/values/strings.xml +++ b/frontend/app/src/main/res/values/strings.xml @@ -1,46 +1,9 @@ - AntiFed - Hello %s, from AntiFed! + AntiFed + Server URL + AntiFed auth + Show menu + Go to auth settings - First Fragment - Second Fragment - Next - Previous - - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam in scelerisque sem. Mauris - volutpat, dolor id interdum ullamcorper, risus dolor egestas lectus, sit amet mattis purus - dui nec risus. Maecenas non sodales nisi, vel dictum dolor. Class aptent taciti sociosqu ad - litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse blandit eleifend - diam, vel rutrum tellus vulputate quis. Aliquam eget libero aliquet, imperdiet nisl a, - ornare ex. Sed rhoncus est ut libero porta lobortis. Fusce in dictum tellus.\n\n - Suspendisse interdum ornare ante. Aliquam nec cursus lorem. Morbi id magna felis. Vivamus - egestas, est a condimentum egestas, turpis nisl iaculis ipsum, in dictum tellus dolor sed - neque. Morbi tellus erat, dapibus ut sem a, iaculis tincidunt dui. Interdum et malesuada - fames ac ante ipsum primis in faucibus. Curabitur et eros porttitor, ultricies urna vitae, - molestie nibh. Phasellus at commodo eros, non aliquet metus. Sed maximus nisl nec dolor - bibendum, vel congue leo egestas.\n\n - Sed interdum tortor nibh, in sagittis risus mollis quis. Curabitur mi odio, condimentum sit - amet auctor at, mollis non turpis. Nullam pretium libero vestibulum, finibus orci vel, - molestie quam. Fusce blandit tincidunt nulla, quis sollicitudin libero facilisis et. Integer - interdum nunc ligula, et fermentum metus hendrerit id. Vestibulum lectus felis, dictum at - lacinia sit amet, tristique id quam. Cras eu consequat dui. Suspendisse sodales nunc ligula, - in lobortis sem porta sed. Integer id ultrices magna, in luctus elit. Sed a pellentesque - est.\n\n - Aenean nunc velit, lacinia sed dolor sed, ultrices viverra nulla. Etiam a venenatis nibh. - Morbi laoreet, tortor sed facilisis varius, nibh orci rhoncus nulla, id elementum leo dui - non lorem. Nam mollis ipsum quis auctor varius. Quisque elementum eu libero sed commodo. In - eros nisl, imperdiet vel imperdiet et, scelerisque a mauris. Pellentesque varius ex nunc, - quis imperdiet eros placerat ac. Duis finibus orci et est auctor tincidunt. Sed non viverra - ipsum. Nunc quis augue egestas, cursus lorem at, molestie sem. Morbi a consectetur ipsum, a - placerat diam. Etiam vulputate dignissim convallis. Integer faucibus mauris sit amet finibus - convallis.\n\n - Phasellus in aliquet mi. Pellentesque habitant morbi tristique senectus et netus et - malesuada fames ac turpis egestas. In volutpat arcu ut felis sagittis, in finibus massa - gravida. Pellentesque id tellus orci. Integer dictum, lorem sed efficitur ullamcorper, - libero justo consectetur ipsum, in mollis nisl ex sed nisl. Donec maximus ullamcorper - sodales. Praesent bibendum rhoncus tellus nec feugiat. In a ornare nulla. Donec rhoncus - libero vel nunc consequat, quis tincidunt nisl eleifend. Cras bibendum enim a justo luctus - vestibulum. Fusce dictum libero quis erat maximus, vitae volutpat diam dignissim. - \ No newline at end of file