diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml index 0c0c338..7b8620c 100644 --- a/.idea/deploymentTargetDropDown.xml +++ b/.idea/deploymentTargetDropDown.xml @@ -3,7 +3,20 @@ - + + + + + + + + + + + + + + diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 8a0e420..f9b8f52 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,6 +1,7 @@ plugins { id("com.android.application") id("org.jetbrains.kotlin.android") + id("com.google.devtools.ksp") version "1.9.0-1.0.13" } android { @@ -48,9 +49,9 @@ android { dependencies { - implementation("androidx.core:core-ktx:1.10.1") - implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.1") - implementation("androidx.activity:activity-compose:1.7.0") + implementation("androidx.core:core-ktx:1.12.0") + implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.7.0") + implementation("androidx.activity:activity-compose:1.8.2") implementation(platform("androidx.compose:compose-bom:2023.08.00")) implementation("androidx.compose.ui:ui") implementation("androidx.compose.ui:ui-graphics") @@ -63,4 +64,10 @@ dependencies { androidTestImplementation("androidx.compose.ui:ui-test-junit4") debugImplementation("androidx.compose.ui:ui-tooling") debugImplementation("androidx.compose.ui:ui-test-manifest") + + implementation("androidx.navigation:navigation-compose:2.7.7") + implementation("io.github.raamcosta.compose-destinations:core:1.0.2-beta") + ksp("io.github.raamcosta.compose-destinations:ksp:1.0.2-beta") + + implementation("androidx.compose.material:material-icons-extended:1.6.2") } \ No newline at end of file diff --git a/app/src/main/java/it/edu/cassandroferminervi/flowschool/HomeScreen.kt b/app/src/main/java/it/edu/cassandroferminervi/flowschool/HomeScreen.kt new file mode 100644 index 0000000..75fc322 --- /dev/null +++ b/app/src/main/java/it/edu/cassandroferminervi/flowschool/HomeScreen.kt @@ -0,0 +1,21 @@ +package it.edu.cassandroferminervi.flowschool + +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import com.ramcosta.composedestinations.annotation.Destination +import com.ramcosta.composedestinations.navigation.DestinationsNavigator + +@Destination +@Composable +fun HomeScreen(navigator: DestinationsNavigator) { + Box( + contentAlignment = Alignment.Center, + modifier = Modifier.fillMaxSize() + ) { + Text("Home page") + } +} \ No newline at end of file diff --git a/app/src/main/java/it/edu/cassandroferminervi/flowschool/LoginScreen.kt b/app/src/main/java/it/edu/cassandroferminervi/flowschool/LoginScreen.kt new file mode 100644 index 0000000..e4e8cf1 --- /dev/null +++ b/app/src/main/java/it/edu/cassandroferminervi/flowschool/LoginScreen.kt @@ -0,0 +1,92 @@ +package it.edu.cassandroferminervi.flowschool + +import androidx.compose.foundation.Image +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.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.text.KeyboardOptions +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Visibility +import androidx.compose.material.icons.filled.VisibilityOff +import androidx.compose.material3.Button +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.Text +import androidx.compose.material3.TextField +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.text.input.KeyboardType +import androidx.compose.ui.text.input.PasswordVisualTransformation +import androidx.compose.ui.text.input.VisualTransformation +import androidx.compose.ui.unit.dp +import com.ramcosta.composedestinations.HomeScreenDestination +import com.ramcosta.composedestinations.annotation.Destination +import com.ramcosta.composedestinations.navigation.DestinationsNavigator + +@Destination(start = true) +@Composable +fun LoginScreen(navigator: DestinationsNavigator) { + var code by remember { mutableStateOf("") } + var password by remember { mutableStateOf("") } + var passwordVisible by remember { mutableStateOf(false) } + + Column( + verticalArrangement = Arrangement.Center, + modifier = Modifier + .fillMaxSize() + .padding(horizontal = 50.dp) + ) { + Image( + painterResource(id = R.drawable.logo), + contentDescription = "Logo", + //alignment = Alignment.Center, + Modifier.size(192.dp).align(Alignment.CenterHorizontally) + ) + Spacer(modifier = Modifier.height(64.dp)) + TextField( + value = code, + onValueChange = { code = it }, + label = { Text("Codice") }, + singleLine = true, + modifier = Modifier.fillMaxWidth() + ) + Spacer(modifier = Modifier.height(8.dp)) + TextField( + value = password, + onValueChange = { password = it }, + label = { Text("Password") }, + singleLine = true, + visualTransformation = if (passwordVisible) VisualTransformation.None else PasswordVisualTransformation(), + keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Password), + trailingIcon = { + val image = if (passwordVisible) + Icons.Filled.Visibility + else Icons.Filled.VisibilityOff + + val description = if (passwordVisible) "Nascondi password" else "Mostra password" + + IconButton(onClick = {passwordVisible = !passwordVisible}){ + Icon(imageVector = image, description) + } + }, + modifier = Modifier.fillMaxWidth() + ) + Spacer(modifier = Modifier.height(8.dp)) + Button(onClick = { + navigator.navigate(HomeScreenDestination) + }, modifier = Modifier.align(Alignment.End)) { + Text("Accedi") + } + } +} \ No newline at end of file diff --git a/app/src/main/java/it/edu/cassandroferminervi/flowschool/MainActivity.kt b/app/src/main/java/it/edu/cassandroferminervi/flowschool/MainActivity.kt index a8a5c05..dcca7af 100644 --- a/app/src/main/java/it/edu/cassandroferminervi/flowschool/MainActivity.kt +++ b/app/src/main/java/it/edu/cassandroferminervi/flowschool/MainActivity.kt @@ -3,13 +3,8 @@ package it.edu.cassandroferminervi.flowschool import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Surface -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.tooling.preview.Preview +import com.ramcosta.composedestinations.DestinationsNavHost +import com.ramcosta.composedestinations.NavGraphs import it.edu.cassandroferminervi.flowschool.ui.theme.FlowSchoolTheme class MainActivity : ComponentActivity() { @@ -17,27 +12,8 @@ class MainActivity : ComponentActivity() { super.onCreate(savedInstanceState) setContent { FlowSchoolTheme { - // A surface container using the 'background' color from the theme - Surface(modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background) { - Greeting("Android") - } + DestinationsNavHost(navGraph = NavGraphs.root) } } } -} - -@Composable -fun Greeting(name: String, modifier: Modifier = Modifier) { - Text( - text = "Hello $name!", - modifier = modifier - ) -} - -@Preview(showBackground = true) -@Composable -fun GreetingPreview() { - FlowSchoolTheme { - Greeting("Android") - } } \ No newline at end of file diff --git a/app/src/main/res/drawable/logo.png b/app/src/main/res/drawable/logo.png new file mode 100644 index 0000000..e50c7fb Binary files /dev/null and b/app/src/main/res/drawable/logo.png differ