diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 738afb7..090cf8b 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -28,7 +28,7 @@ android { } } compileOptions { - sourceCompatibility = JavaVersion.VERSION_11 + sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 } kotlinOptions { diff --git a/app/src/main/java/es/fpsumma/dam2/intro/MainActivity.kt b/app/src/main/java/es/fpsumma/dam2/intro/MainActivity.kt index 0462544..02ec0e5 100644 --- a/app/src/main/java/es/fpsumma/dam2/intro/MainActivity.kt +++ b/app/src/main/java/es/fpsumma/dam2/intro/MainActivity.kt @@ -9,6 +9,7 @@ import androidx.compose.material3.Surface import androidx.compose.ui.Modifier import com.ivancorrales.basicjetpackcompose.ui.theme.IntroTheme import es.fpsumma.dam2.intro.ui.screens.CounterScreen +import es.fpsumma.dam2.intro.ui.screens.InputDemoScreen class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { @@ -19,7 +20,9 @@ class MainActivity : ComponentActivity() { modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background ) { - CounterScreen() + // CounterScreen() + InputDemoScreen() + } } } diff --git a/app/src/main/java/es/fpsumma/dam2/intro/ui/screens/CounterScreen.kt b/app/src/main/java/es/fpsumma/dam2/intro/ui/screens/CounterScreen.kt index 404c688..8ca7dd6 100644 --- a/app/src/main/java/es/fpsumma/dam2/intro/ui/screens/CounterScreen.kt +++ b/app/src/main/java/es/fpsumma/dam2/intro/ui/screens/CounterScreen.kt @@ -3,20 +3,23 @@ package es.fpsumma.dam2.intro.ui.screens import androidx.compose.foundation.layout.* import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Refresh - import androidx.compose.material3.* import androidx.compose.runtime.* +import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color import androidx.compose.ui.semantics.contentDescription import androidx.compose.ui.semantics.semantics import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp + @Composable fun CounterScreen() { - var count by remember { mutableStateOf(0) } + var count by rememberSaveable { mutableStateOf(5) } + Column( modifier = Modifier @@ -25,31 +28,59 @@ fun CounterScreen() { horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.spacedBy(16.dp) ) { - Text("Hola mi amig@!", style = MaterialTheme.typography.headlineMedium) + Text("Buenos_dias", style = MaterialTheme.typography.headlineMedium) Text("Contador: $count", style = MaterialTheme.typography.titleLarge) + + Row(horizontalArrangement = Arrangement.spacedBy(12.dp)) { + Button( - onClick = {}, - modifier = Modifier.semantics { contentDescription = "Incrementar" } + onClick = { count++ }, + modifier = Modifier.semantics { contentDescription = "Incrementar" }, + colors = ButtonDefaults.buttonColors( + containerColor = Color.Green, + contentColor = Color.White + ) ) { Text("+1") } FilledTonalButton( - onClick = {}, + onClick = { + if (count > 0) { + count-- + } + }, modifier = Modifier.semantics { contentDescription = "Decrementar" } ) { Text("-1") } + + IconButton( - onClick = {}, + onClick = { count = 0 }, modifier = Modifier.size(48.dp) ) { Icon(Icons.Outlined.Refresh, contentDescription = "Reiniciar contador") + } } + + // Botón con ancho que cambia según el contador + Button( + onClick = { }, + modifier = Modifier + .width(40.dp + (count * 10).dp) + .height(48.dp), + + ) { + + } } } @Preview(showBackground = true) @Composable -private fun CounterPreview() { - CounterScreen() -} +private fun CounterPreviewDark() { + CounterScreen() + } + + + diff --git a/app/src/main/java/es/fpsumma/dam2/intro/ui/screens/InputDemoScreen.kt b/app/src/main/java/es/fpsumma/dam2/intro/ui/screens/InputDemoScreen.kt index c11ccc9..d6d9ade 100644 --- a/app/src/main/java/es/fpsumma/dam2/intro/ui/screens/InputDemoScreen.kt +++ b/app/src/main/java/es/fpsumma/dam2/intro/ui/screens/InputDemoScreen.kt @@ -21,15 +21,20 @@ fun InputDemoScreen() { // Calcula el error en función del texto (sin estado extra) Pista -> derivedStateOf // TODO: valida name: no vacío, mínimo 3 caracteres (trim). - val error: String? by remember(name) { + val error: String? by remember(name) { //lo tienes que llamar name.trim por du funcion derivedStateOf { - null + if (name.trim().isEmpty()) { + "El nombre no puede estar vacío"; + }else if (name.trim().length < 3) { + "El nombre debe tener al menos 3 caracteres"; + } + else null } } fun submit() { - if (error == null) { - greeting = "Hola, 👋" + if (error == null && name.trim().isNotBlank()) { + greeting = "Hola, ${name.trim()} 👋" focusManager.clearFocus() } } @@ -49,7 +54,8 @@ fun InputDemoScreen() { Spacer(Modifier.height(16.dp)) Button( onClick = { submit() }, - modifier = Modifier.fillMaxWidth() + modifier = Modifier.fillMaxWidth(), + enabled = error == null && name.trim().isNotBlank() // Hace que no te puede saludar porque desabilita si tiene alguno de los dos errores ) { Text("Saludar") } @@ -62,4 +68,4 @@ fun InputDemoScreen() { @Preview(showBackground = true) @Composable -private fun InputDemoPreview() { InputDemoScreen() } +private fun InputDemoPreview() { InputDemoScreen() } \ No newline at end of file diff --git a/app/src/main/java/es/fpsumma/dam2/intro/ui/theme/Color.kt b/app/src/main/java/es/fpsumma/dam2/intro/ui/theme/Color.kt index c45da49..fe909b5 100644 --- a/app/src/main/java/es/fpsumma/dam2/intro/ui/theme/Color.kt +++ b/app/src/main/java/es/fpsumma/dam2/intro/ui/theme/Color.kt @@ -8,4 +8,5 @@ val Pink80 = Color(0xFFEFB8C8) val Purple40 = Color(0xFF6650a4) val PurpleGrey40 = Color(0xFF625b71) -val Pink40 = Color(0xFF7D5260) \ No newline at end of file +val Pink40 = Color(0xFF7D5260) + diff --git a/app/src/main/java/es/fpsumma/dam2/intro/ui/theme/Theme.kt b/app/src/main/java/es/fpsumma/dam2/intro/ui/theme/Theme.kt index cb6c5d5..0615cd8 100644 --- a/app/src/main/java/es/fpsumma/dam2/intro/ui/theme/Theme.kt +++ b/app/src/main/java/es/fpsumma/dam2/intro/ui/theme/Theme.kt @@ -28,8 +28,8 @@ private val LightColorScheme = lightColorScheme( @Composable fun IntroTheme( - darkTheme: Boolean = false, - dynamicColor: Boolean = true, + darkTheme: Boolean = true, + dynamicColor: Boolean = false, content: @Composable () -> Unit ) { val colorScheme = when { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 656572b..89e87bd 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,3 +1,4 @@ Intro + Intro \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 64452d1..c853dae 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -34,7 +34,7 @@ androidx-activity = { group = "androidx.activity", name = "activity", version.re androidx-constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "constraintlayout" } [plugins] -android-application = { id = "com.android.application", version.ref = "agp" } +android-application = { id = "com.android.application", version.ref = "agp" } kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 2ae5af1..f1d96b7 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Wed Oct 15 11:01:44 CEST 2025 +#Mon Oct 20 13:02:11 CEST 2025 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists